關于智能體接入后端,在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
繁體地址,請注明出處:http://hk.pswp.cn/diannao/85133.shtml
英文地址,請注明出處:http://en.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…