admin管理员组

文章数量:1532343

一.作品演示

博主做的是医疗机器人(能实现管理一体机设备功能)

二.扣子平台创建bot 

扣子是新一代大模型 AI 应用开发平台。无论你是否有编程基础,都可以快速搭建出各种 Bot,并一键发布到各大社交平台,使用的是火山引擎(推出的大模型叫豆包)

 

创建之后自己可以调试

 

三.发布生成api

创建完后点击发布点击创建身份令牌可以得到属于自己的api
 

 四.后端调用方法

官方api调用文档(点击这里),下面是我用python简单(非开发环境)下的一个简单调用,

def send_message_to_bot(bot_id, user_id, message):
    url = 'https://api.coze/v3/chat'
    headers = {
        'Authorization': '',
        'Content-Type': 'application/json'
    }
    data = {
        "bot_id": bot_id,
        "user_id": user_id,
        "stream": True,
        "auto_save_history": True,
        "additional_messages": [
            {
                "role": "user",
                "content": message,
                "content_type": "text"
            }
        ]
    }

    try:
        with (requests.post(url, headers=headers, json=data, stream=True) as response):
            response.raise_for_status()  # 如果响应状态码不是 200,将抛出 HTTPError 异常

            for line in response.iter_lines():  # 使用 iter_lines 迭代响应内容
                if line:

                    json_response = line.decode('utf-8')  # 注意这里不是合法的json
                    yield json_response  # 使用 yield 返回流式数据

    except HTTPError as http_err:
        yield f'HTTP 错误发生: {http_err}'
    except RequestException as req_err:
        yield f'请求错误发生: {req_err}'
    except Exception as err:
        yield f'其他错误发生: {err}'

返回结果是流数据形式(bug是json化不了导致处理起来很烦)

五.数据定位

因为是流式数据,每一条是ai分析处理的流程,包括 怎么去定位到我想到得到的返回结果呢,有人可能会觉得定位到 event:conversation.messagepleted 这块就行了

但是不同的请求event:conversation.messagepleted后面的data也不一样

聪明的博主发现了,不管提问是什么,包含我要的数据,一定是倒数第四个event:conversation.messagepleted后面的data

六.数据处理

定位了数据之后怎么去将这些数据处理只返回我要的那块呢

问题1  怎么锁定event:conversation.messagepleted块后面的数据

可以发现他是一个流式数据,数据是很像json的格式,“data:{"id":"7394072959796690998","conversation_id":"7394072959796641846","bot_id":"7392882322007572495","role":"assistant","type":"verbose","content":"{\"msg_type\":\"knowledge_recall\",\"data\":\"{\\\"chunks\\\":[]}\"}","content_type":"text","chat_id":"7394072959796658230"} ”

很容易想的就是把前面data:这块剔除然后就可以json化,但是奇怪使用python的json的还是会返回这是一个非典型的data数据

 

解决1 变成字符串列表处理,然后提取有中文的部分的最后倒数第四块。


        i = send_message_to_bot(bot_id, user_id, message)  # 获取生成器对象
        a = list(i)  # 将生成器对象的值放入列表中

        for c in range(len(a)):
            if a[c] == 'event:conversation.messagepleted':

                b=a[c+1].replace("data:", "")
                print(b)
                if re.search('[\u4e00-\u9fff]', b):  # 匹配中文字符范围

                    accumulated_msgs.append(b)

问题2 定位了哪一串数据怎么定位数据中的内容(后端json化失败)

现在传输给前端是类似于这样的数据

{"id":"7394072959796690998","conversation_id":"7394072959796641846","bot_id":"7392882322007572495","role":"assistant","type":"verbose","content":"{\"msg_type\":\"knowledge_recall\",\"data\":\"{\\\"chunks\\\":[]}\"}","content_type":"text","chat_id":"7394072959796658230"}

 

解决2 前端接受字符串后再json化提取数据

很神奇就是后端无法json,但是前端可以

 .then(response => response.json())
      .then(data => {
        // 显示服务器响应的消息
         var json_data = JSON.parse(data);
         console.log('Content from JSON:', json_data);
        displayMessage(json_data.content, 'bot_message');
      })

 

7.前端页面设计

css和JavaScript还有后端代码都已经上传平台,免费下载

 

 8.觉得有用的话给博主点点赞吧

本文标签: 自己的机器人教你做简单智能