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

news2025/6/1 0:34:21
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 类型消息里的 chunks
    final_reply = ""       # 要发送给前端的最终文本

    for msg in messages:
        raw_content = msg.get("content", "")

        # 尝试把 raw_content 解析成 JSON
        try:
            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)
                break

            else:
                # msg_type == "knowledge_recall",进一步解析 inner_data_str 看看有没有 chunks
                if 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_content
            break

    # 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.coloradmin.cn/o/2391961.html

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

相关文章

https下git拉取gitlab仓库源码

git init 创建仓库 参考下面创建公私秘钥对 注意不要以root用户身份创建公私钥,确保保存在/home/username GitLab配置ssh key - 阿豪聊干货 - 博客园 Your identification has been saved in /home/xxx/.ssh/id_ed25519 Your public key has been saved in /ho…

距离计算范围查找距离排序

一 使用场景 目前基于某个位置查附近的人,附近的商家等等,查出来的结果添加距离,或者查附近多大范围内的人或者商家,然后按距离排序已经是IT界一个很通用的功能了。 二 距离计算搜索(百万点集以下) 2.1 球的定义 2.2 两点之…

PS linux 基础篇1-AXI_DMA

系列文章目录 文章目录 系列文章目录前言一、AXI DMA ip核二、BD工程三、PS linux工程1.使用开源的xilinx_axidma-master工程验证驱动2.按照其他的开源进行就行,没什么写的了 前言 PL与PS之间快速的接口,本文为LOOP回环测试 一、AXI DMA ip核 MM2S mem…

AI大模型学习三十、ubuntu安装comfyui,安装插件,修改返回405 bug,值得一看喔

一、说明 ComfyUI是一个开源的、基于节点的Web应用。它允许用户根据一系列文本提示(Prompt)生成图像。 ComfyUI使用扩散模型作为基础模型,并结合 ControlNet、Lora和LCM低阶自适应等模型,每个工具都由程序中的一个节点表示 二、开…

Collection集合遍历的三种方法

1.foreach循环遍历 格式&#xff1a;for&#xff08;元素的数据类型 变量名&#xff1a;数组或集合&#xff09;{ } 2.使用迭代器遍历 方法名称&#xff1a;Iterator<E> iterator&#xff08;&#xff09; 说明&#xff1a;返回集合中的迭代器对象&#xff0c;该迭代…

Taro on Harmony C-API 版本正式开源

Taro 是由京东发起并维护的开放式跨端跨框架解决方案&#xff0c;支持以 Web 的开发范式来实现小程序、H5、原生 APP 的跨端统一开发&#xff0c;从 18 年开源至今&#xff0c;在 GitHub 已累计获得 36,000 Stars。 Taro x 纯血鸿蒙 在过去的一年中&#xff0c;Taro 经历了显…

知识隔离的视觉-语言-动作模型:训练更快、运行更快、泛化更好

25年5月来自PI的论文“Knowledge Insulating Vision-Language-Action Models: Train Fast, Run Fast, Generalize Better”。 视觉-语言-动作 (VLA) 模型通过将端到端学习与来自网络规模视觉-语言模型 (VLM) 训练的语义知识迁移相结合&#xff0c;为机器人等物理系统训练控制策…

[ARM][架构] 02.AArch32 程序状态

目录 参考资料 1.程序状态 - PSTATE 2.用户模式的 PSTATE 信息 2.1.状态标志 2.2.溢出/饱和标志 2.3.大于等于标志 2.4.指令集状态 2.5.IT 块状态 2.6.端序控制 2.7.指令执行时间控制 3.用户模式访问 PSTATE - APSR 寄存器 4.系统模式的 PSTATE 信息 4.1.状态标志…

React---day4

3、React脚手架 生成的脚手架的目录结构 什么是PWA PWA全称Progressive Web App&#xff0c;即渐进式WEB应用&#xff1b;一个 PWA 应用首先是一个网页, 可以通过 Web 技术编写出一个网页应用&#xff1b;随后添加上 App Manifest 和 Service Worker 来实现 PWA 的安装和离线…

ArkUI(方舟UI框架)介绍

ArkUI&#xff08;方舟UI框架&#xff09;介绍 构建快速入门 使用ArkWeb构建页面

若依微服务的定制化服务

复制依赖 复制依赖 复制system服务的bootstrap.yml文件&#xff0c;修改port和name 在nacos复制一个新的nacos配置&#xff0c;修改对应的nacos的配置 &#xff0c;可能不需要修改&#xff0c;看情况。 网关修改 注意curd的事项&#xff0c;模块名称的修改

Axios 如何通过配置实现通过接口请求下载文件

前言 今天&#xff0c;我写了 《Nodejs 实现 Mysql 数据库的全量备份的代码演示》 和 《NodeJS 基于 Koa, 开发一个读取文件&#xff0c;并返回给客户端文件下载》 两篇文章。在这两篇文章中&#xff0c;我实现了数据库的备份&#xff0c;和提供数据库下载等接口。 但是&…

20250529-C#知识:运算符重载

C#知识&#xff1a;运算符重载 运算符重载能够让我们像值类型数据那样使用运算符对类或结构体进行运算&#xff0c;并且能够自定义运算逻辑。 1、运算符重载及完整代码示例 作用是让自定义的类或者结构体能够使用运算符运算符重载一定是public static的可以把运算符看成一个函…

如何在WordPress网站中添加相册/画廊

在 WordPress 网站上添加相册可以让您展示许多照片。无论您是在寻找标准的网格相册画廊还是独特的瀑布流相册画廊体验&#xff0c;学习如何在 WordPress 网站上添加相册总是一个好主意。在本教程中&#xff0c;我们将介绍两种为 WordPress 网站添加相册的方法&#xff1a;使用区…

Codeforces Round 1025 (Div. 2)

Problem - A - Codeforces 查有没有人说谎&#xff0c;有一个必错的情况&#xff1a; 两个人都说输了&#xff0c;必有人撒谎&#xff0c;还有就是所有人都赢了&#xff0c;也是撒谎 来看代码&#xff1a; #include <iostream> #include <vector> using namespa…

Ubuntu20.04操作系统ssh开启oot账户登录

文章目录 1 前提2 设置root密码3 允许ssh登录root账户3.1 编辑配置文件3.2 重启ssh服务 4 安全注意事项 1 前提 ssh可以使用普通用户正常登录。 2 设置root密码 打开终端&#xff0c;设置密码 sudo passwd root # 设置root密码3 允许ssh登录root账户 3.1 编辑配置文件 su…

类欧几里得算法(floor_sum)

文章目录 普通floor_sum洛谷P5170 【模板】类欧几里得算法 万能欧几里得算法求 ∑ i 1 n A i B ⌊ a i b c ⌋ \sum_{i1}^{n}A^iB^{\lfloor \frac{aib}{c} \rfloor} ∑i1n​AiB⌊caib​⌋求 ∑ i 0 n ⌊ a i b c ⌋ \sum_{i0}^n \lfloor\frac{aib}{c}\rfloor ∑i0n​⌊caib…

每日Prompt:卵石拼画

提示词 世界卵石拼画大师杰作&#xff0c;极简风格&#xff0c;贾斯汀.贝特曼的风格&#xff0c;彩色的鹅卵石&#xff0c;斑马头像&#xff0c;鹅卵石拼画&#xff0c;马卡龙浅紫色背景&#xff0c;自然与艺术的结合&#xff0c;新兴的艺术创作形式&#xff0c;石头拼贴画&am…

硬件服务器基础

1、硬件服务器基础 2、服务器后面板 3、组件 3.1 CPU 3.2 内存 3.3 硬盘 3.4 风扇 4、服务器品牌 4.1 配置 4.2 CPU 架构 4.2.1 CPU 命名规则 4.2.2 服务器 CPU 和家用 CPU 的区别 4.2.3 CPU 在主板的位置 4.2.4 常见 CPU 安装方式 4.3 内存中组件 4.3.1 内存的分类 4.3.1.1 …

TRS收益互换平台开发实践:从需求分析到系统实现

一、TRS业务概述 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;允许投资者通过支付固定或浮动利息&#xff0c;换取标的资产&#xff08;如股票、指数&#xff09;的收益权。典型应用场景包括&#xff1a; ​​跨境投资​​&#xff…