关于智能体接入后端,在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.pswp.cn/diannao/85133.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL进阶之旅 Day 8:窗口函数实用技巧

【SQL进阶之旅 Day 8】窗口函数实用技巧 在现代数据库开发中,处理复杂的业务逻辑和大规模数据时,仅仅依靠传统的GROUP BY和JOIN操作已经无法满足需求。**窗口函数(Window Function)**作为SQL标准的一部分,为开发者提供…

编译rustdesk,使用flutter、hwcodec硬件编解码

目录 安装相应的环境安装visual studio安装vpkg安装rust开发环境安装llvm和clang编译源码下载源码使用Sciter作为UI的(已弃用)使用flutter作为UI的(主流)下载flutter sdk桥接静默安装最近某desk免费的限制越来越多,实在没办法,平时远程控制用的比较多,只能用rustdesk了,…

由反汇编代码确定结构体的完整声明

C程序中遇到下面的代码 typedef struct {int left;a_struct a[CNT];int right; } b_struct;void test( int i, b_struct *bp) {int nbp->leftbp->right;a_struct *ap&bp->a[i];ap->x[ap->idx]n; } 下面是test函数的反汇编代码 结合C程序中的代码与test函数…

鸿蒙OSUniApp复杂表单与动态验证实践:打造高效的移动端表单解决方案#三方框架 #Uniapp

UniApp复杂表单与动态验证实践:打造高效的移动端表单解决方案 引言 在移动应用开发中,表单处理一直是一个既常见又具有挑战性的任务。随着HarmonyOS生态的蓬勃发展,越来越多的开发者开始关注跨平台解决方案。本文将深入探讨如何使用UniApp框…

Python学习(2) ----- Python的数据类型及其集合操作

在 Python 中,一切皆对象,每个对象都有类型。下面是 Python 中的常见内置类型分类和示例: 🟡 1. 数字类型(Numeric Types) 类型说明示例int整数5, -42float浮点数3.14, -0.5complex复数1 2j a 10 …

深入解析Go语言数据类型:从底层到高级应用

引言 Go语言的数据类型系统设计体现了​​简洁性​​与​​高效性​​的完美平衡。作为静态编译型语言,Go提供了丰富的数据类型支持,从基础数值类型到高级并发原语,都经过精心设计。本文将深入剖析Go语言数据类型体系,揭示其底层…

数据交易场景的数据质量评估

在现代数字化时代,数据已成为推动商业发展的核心驱动力。基于不同的交易产品和业务场景,数据产品的质量和准确性直接影响到数据资产的价值及其在市场中的流通性。因此,为数据产品提供全面、深入的数据质量评估报告,不仅有助于提升…

Java 对接 Office 365 邮箱全攻略:OAuth2 认证 + JDK8 兼容 + Spring Boot 集成(2025 版)

🚨 重要通知:微软强制 OAuth2,传统认证已失效! 2023 年 10 月起,Office 365 全面禁用用户名 密码认证,Java 开发者必须通过OAuth 2.0实现邮件发送。本文针对 CSDN 技术栈,提供从 Azure AD 配置…

一文详谈Linux中的时间管理和定时器编程

(目录) 先说一些在计算机中需要用到时间的地方:系统日志log、OS调度(时间片、定时器)等等~~ 时间的计量 计时的方式发展:日晷、沙漏 -> 机械钟 -> 石英振荡器、晶振 -> 铯原子钟 -> 氢原子钟 计算机中的计时方式&…

使用FastAPI+Sqlalchemy从一个数据库向另一个数据库更新数据(sql语句版)

from sqlalchemy import create_engine, text from sqlalchemy.orm import sessionmaker # 配置数据库连接(示例为PostgreSQL->MySQL) SRC_DB_URL postgresql://user:passsource_host:5432/source_db DST_DB_URL mysqlpymysql://user:passdest_hos…

基于python脚本进行Maxwell自动化仿真

本文为博主进行Maxwell自动化研究过程的学习记录,同时对Maxwell自动化脚本(pythonIron)实现方法进行分享。 文章目录 脚本使用方法脚本录制与查看常用脚本代码通用开头定义项目调整设计变量软件内对应位置脚本 设置求解器软件内对应位置脚本…

pikachu通关教程-RCE

目录 RCE(remote command/code execute)概述: exec "ping" 管道符 乱码问题 RCE(remote command/code execute)概述: RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统 分为远程代码和远程命令两种.当…

JavaScript性能优化全景指南

JavaScript性能优化全景指南 Ⅰ. 加载性能优化 1.1 代码分割与懒加载 动态导入(ES2020) javascript // 路由级代码分割 const ProductPage () > import(/* webpackChunkName: "product" */ ./ProductPage.vue); // 交互驱动加载 document.querySelector(#char…

BaseTypeHandler用法-笔记

1.BaseTypeHandler简介 org.apache.ibatis.type.BaseTypeHandler 是 MyBatis 提供的一个抽象类,通过继承该类并实现关键方法,可用于实现 Java 类型 与 JDBC 类型 之间的双向转换。当数据库字段类型与 Java 对象属性类型不一致时(如&#xff…

t015-预报名管理系统设计与实现 【含源码!!!】

项目演示地址 摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装预报名管理系统软件来发挥其高效地信息处理的…

Day12 - 计算机网络 - HTTP

HTTP常用状态码及含义? 301和302区别? 301:永久性移动,请求的资源已被永久移动到新位置。服务器返回此响应时,会返回新的资源地址。302:临时性性移动,服务器从另外的地址响应资源,但…

【python深度学习】Day 40 训练和测试的规范写法

知识点回顾: 彩色和灰度图片测试和训练的规范写法:封装在函数中展平操作:除第一个维度batchsize外全部展平dropout操作:训练阶段随机丢弃神经元,测试阶段eval模式关闭dropout 作业:仔细学习下测试和训练代码…

亡羊补牢与持续改进 - SRE 的安全日志、审计与事件响应

亡羊补牢与持续改进 - SRE 的安全日志、审计与事件响应 如果说我们之前讨论的安全措施(如 IAM、网络策略、密钥管理、漏洞补丁)是为我们的“数字城堡”修筑坚固的城墙、设置精密的门锁、定期检查和修补潜在的裂缝,那么安全日志就像是遍布城堡内外的监控摄像头和出入登记簿,…

CppCon 2014 学习第2天:Using Web Services in C++

概述 这是一个会议或演讲的概述内容,主要介绍一个关于C Rest SDK的分享,翻译和理解如下: 翻译 概述 先介绍什么是典型的Web服务结构和它的特征讲讲调用这些Web服务的几种方式重点介绍自己团队开发的一个C库(C Rest SDK&#xf…

【OpenHarmony】【交叉编译】使用gn在Linux编译3568a上运行的可执行程序

linux下编译arm64可执行程序 一.gn ninja安装二.交叉编译工具链安装1.arm交叉编译工具2.安装arm64编译器 三. gn文件添加arm及arm64工具链四.编译验证 本文以gn nijia安装中demo为例,将其编译为在arm64(rk_3568_a开发板)环境下可运行的程序 一.gn ninja安装 安装g…