
从无到有,超简单教你做属于自己的智能体聊天机器人
i = send_message_to_bot(bot_id, user_id, message) # 获取生成器对象a = list(i) # 将生成器对象的值放入列表中print(b)if re.search('[\u4e00-\u9fff]', b): # 匹配中文字符范围。
一.作品演示
博主做的是医疗机器人(能实现管理一体机设备功能)
二.扣子平台创建bot
扣子是新一代大模型 AI 应用开发平台。无论你是否有编程基础,都可以快速搭建出各种 Bot,并一键发布到各大社交平台,使用的是火山引擎(推出的大模型叫豆包)
创建之后自己可以调试
三.发布生成api
创建完后点击发布点击创建身份令牌可以得到属于自己的api
四.后端调用方法
官方api调用文档(点击这里),下面是我用python简单(非开发环境)下的一个简单调用,
def send_message_to_bot(bot_id, user_id, message):
url = 'https://api.coze.cn/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.message.completed 这块就行了
但是不同的请求event:conversation.message.completed后面的data也不一样
聪明的博主发现了,不管提问是什么,包含我要的数据,一定是倒数第四个event:conversation.message.completed后面的data
六.数据处理
定位了数据之后怎么去将这些数据处理只返回我要的那块呢
问题1 怎么锁定event:conversation.message.completed块后面的数据
可以发现他是一个流式数据,数据是很像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.message.completed':
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.觉得有用的话给博主点点赞吧
更多推荐
所有评论(0)