当前位置: 首页 > news >正文

关于智能体接入后端,在Apifox能够传参数给智能体的测试

from flask import Flask, request, jsonify, render_template
import requests
import json  # 用于解析嵌套的 JSON 字符串app = Flask(__name__)COZE_BOT_ID = '7508736911423963162'
COZE_API_KEY = 'pat_cHXqrFzcvtktfmmlp4pjF3O2qmjioQW46uU8UNbUugyvSlFZclklpunc53DbR8ws'
COZE_API_URL = 'https://api.coze.cn/open_api/v2/chat'@app.route('/zhoushibo')
def index():return render_template('index.html')@app.route('/chat', methods=['POST'])
def chat():user_input = request.json.get('message')headers = {'Authorization': f'Bearer {COZE_API_KEY}','Content-Type': 'application/json'}payload = {'bot_id': COZE_BOT_ID,'user': 'user_001','query': user_input}response = requests.post(COZE_API_URL, headers=headers, json=payload)data = response.json()# 1. 先拿到 Coze 返回的 messages 列表messages = data.get("messages", [])# 2. 遍历每条消息,优先返回第一条“非知识召回”类型的回复;否则把所有知识召回的 chunks 拼起来collected_chunks = []  # 用来收集所有 knowledge_recall 类型消息里的 chunksfinal_reply = ""       # 要发送给前端的最终文本for msg in messages:raw_content = msg.get("content", "")# 尝试把 raw_content 解析成 JSONtry:parsed_outer = json.loads(raw_content)msg_type = parsed_outer.get("msg_type", "")inner_data_str = parsed_outer.get("data", "")if msg_type != "knowledge_recall":# 如果这一条不是知识召回类型,直接取它的 content 当作最终回复# (不同 msg_type 里真正要呈现的聊天文本,往往在 parsed_outer["content"])final_reply = parsed_outer.get("content", raw_content)breakelse:# msg_type == "knowledge_recall",进一步解析 inner_data_str 看看有没有 chunksif inner_data_str:parsed_inner = json.loads(inner_data_str)chunks = parsed_inner.get("chunks", [])# 如果 chunks 是列表且非空,就把这些片段收集起来if isinstance(chunks, list) and len(chunks) > 0:for chunk in chunks:# 每个 chunk 通常是 {"content": "这里是一段文本"}collected_chunks.append(chunk.get("content", ""))# 如果 inner_data_str 为 "" 或 chunks 为空,直接忽略,继续处理下一条消息except (ValueError, json.JSONDecodeError):# 如果 raw_content 根本不是合法 JSON,就把它作为“非知识召回”类型直接返回final_reply = raw_contentbreak# 3. 如果在遍历过程中没有碰到“非知识召回”类型的回复,且 collected_chunks 非空,就拼接后返回if not final_reply and collected_chunks:final_reply = "".join(collected_chunks)# 4. 如果以上都没有拿到有效文本,就返回一个默认提示if not final_reply:final_reply = "对不起,暂时无法获取有效回复。"return jsonify({'reply': final_reply})if __name__ == '__main__':app.run(debug=True)

这是我的Flask源代码,在Apifox的测试中仅仅只能完成传入一个message这个消息串的简单操作,不能传参数。

我的原先代码能正常运行,是因为我之前只接收了一个 message 字段,把它直接作为 query 传递给 Coze:

user_input = request.json.get('message')
payload = {'bot_id': COZE_BOT_ID,'user': 'user_001','query': user_input
}

这是我现在的新需求(实现多参数的输入):

{"message": "请帮我推荐大模型","场景": "文本生成","预算": "500元"
}

如果我还是 user_input = request.json.get('message'),只会把 "请帮我推荐大模型" 传给 Coze,其他参数全部丢失。

我需要把所有参数(如 "场景"、"预算")一起传递,大模型才能“理解上下文”。

而final_prompt的作用是把 message 和所有其他参数拼成一句话。

所以这里需要改两个地方:

第一个:

user_input = request.json.get('message')

 改为:

# 2. 单独提取 message,其余参数合成结构化内容user_message = data.get('message', '')params = {k: v for k, v in data.items() if k != 'message'}params_text = "\n".join([f"{k}:{v}" for k, v in params.items()]) if params else ""final_prompt = f"用户请求:{user_message}\n{params_text}" if params_text else f"用户请求:{user_message}"

第二个:

payload = {'bot_id': COZE_BOT_ID,'user': 'user_001','query': user_input}

 改为:

payload = {'bot_id': COZE_BOT_ID,'user': 'user_001','query': final_prompt   # 改为 final_prompt}

//

如果用户只传了 message,那 final_prompt 也只是那一句话,对原来功能无影响。

http://www.xdnf.cn/news/709075.html

相关文章:

  • 【科研绘图系列】R语言绘制GO term 富集分析图(enrichment barplot)
  • 西门子嵌入式学习笔记---(1)裸机和调度器开发
  • 人工智能赋能基础教育个性化学习的理论建构与实践探索
  • Opencv实用操作6 开运算 闭运算 梯度运算 礼帽 黑帽
  • [VMM]分享一个用SystemC编写的页表管理程序
  • GCN图神经网络的光伏功率预测
  • 德思特新闻 | 德思特与es:saar正式建立合作伙伴关系
  • 2025.05.28-华为暑期实习第一题-100分
  • 基于本地知识库的政务问答智能体
  • IDEA项目推送到远程仓库
  • 如何让 Git 停止跟踪文件?停止后又如何恢复跟踪?
  • node_modules包下载不下来
  • OpenCv高阶(二十)——dlib脸部轮廓绘制
  • LeetCode 3373.连接两棵树后最大目标节点数目 II:脑筋急转弯+广度优先搜索(黑白染色法)
  • React Native 实现抖音式图片滑动切换浏览组件-媲美抖音体验的滑动式流畅预览组件
  • [特殊字符] NAT映射类型详解:从基础原理到应用场景全解析
  • Python训练营打卡Day39
  • Arduino 编码器
  • LVDS系列14:Xilinx Ultrascale系可编程输入延迟(四)
  • HTML5 Canvas 星空战机游戏开发全解析
  • ASP.NET MVC添加视图示例
  • JAVA:Kafka 消息可靠性详解与实践样例
  • Android第十一次面试多线程篇
  • nginx源码下载和测试
  • mkdir: cannot create directory ‘gitlab-stu’: No space left on device
  • Vue 技术文档
  • 静态资源js,css免费CDN服务比较
  • 哈工大编译原理 | 7.运行时存储分配
  • 能源领域新兴技术论坛:EMQ 实时数据引擎构建工业智能中枢
  • EC800X QuecDuino开发板介绍