Dify chat模型streaming转为文字解决方案

问题

我们搭建了一个Agent的知识库问题,希望调用接口进行返回,但是Agent模型只支持streaming格式,不支持blocking模式。

而流式输出是字节码,我们是不能直接看懂它的意思,因此需要通过下面代码去实现转换。

python 复制代码
import requests
import json


def stream_to_text(url, headers, data):
    """
    将流式API响应转换为完整的文字输出

    参数:
        url: API端点URL
        headers: 请求头
        data: 请求数据(字典格式)

    返回:
        完整的响应文本
    """
    full_response = ""

    try:
        # 发送POST请求,设置stream=True来接收流式响应
        response = requests.post(url, headers=headers, json=data, stream=True)
        response.raise_for_status()

        # 逐行读取流式响应
        for line in response.iter_lines():
            if line:
                # 解码字节为字符串
                line_str = line.decode('utf-8')

                # 流式响应通常以"data: "开头
                if line_str.startswith('data: '):
                    json_str = line_str[6:]  # 移除"data: "前缀

                    try:
                        # 解析JSON数据
                        data_obj = json.loads(json_str)

                        # 根据实际API响应结构提取文本
                        # 这里可能需要根据你的API实际返回格式调整
                        if 'answer' in data_obj:
                            full_response += data_obj['answer']
                        elif 'message' in data_obj:
                            full_response += data_obj['message']
                        elif 'text' in data_obj:
                            full_response += data_obj['text']

                    except json.JSONDecodeError:
                        # 如果不是JSON格式,直接添加文本
                        if json_str != '[DONE]':  # 忽略结束标记
                            full_response += json_str

        return full_response

    except requests.exceptions.RequestException as e:
        return f"请求错误: {str(e)}"


# 使用示例
if __name__ == "__main__":
    url = "http://xxx/v1/chat-messages"

    headers = {
        "Authorization": "Bearer your-api-key",
        "Content-Type": "application/json"
    }

    data = {
        "inputs": {},
        "query": "卷纸属于哪一类的费用报销",
        "response_mode": "streaming",
        "conversation_id": "",
        "user": "abc-123"
    }

    print("正在请求API...")
    result = stream_to_text(url, headers, data)
    print("\n完整响应:")
    print(result)

运行后会得到以下结果:

相关推荐
Aqoo6 小时前
为什么我把专利交底书做成 Skill
openai·agent
摸鱼同学6 小时前
14-oh-my-claude / oh-my-claudecode:多 Agent 编排框架
ai·agent·claude·skill·omc
米小虾7 小时前
CLI + MCP + Skill:2026年AI Agent开发的三大范式
agent·mcp
冬奇Lab7 小时前
真正的 AI-Native Workflow 是什么?——四个判断测试
人工智能·agent
KaneLogger8 小时前
Pi Agent & OMP 快速上手指南:安装、配置与日常用法
aigc·agent·ai编程
字节跳动开源10 小时前
Viking AI 搜索 CLI—— 开发者的合法“外挂”
人工智能·agent
OpenBayes贝式计算11 小时前
LongCat-Video-Avatar 1.5开源,具备全领域泛化能力的音频驱动视频生成模型;AI Student Impact Dataset 5 万量级多
google·llm·agent
OpenBayes贝式计算11 小时前
教程上新丨16GB 笔记本跑出接近 26B MoE 性能,Gemma 4 12B 基于创新架构统一处理文本 / 图像 / 声音三种模态
计算机视觉·google·agent
心枢AI研习社12 小时前
我问了claude目前最强大的模型fable 5这个问题?
人工智能·agent·claude
明略科技12 小时前
什么是 RAG?为什么光靠大模型的记忆力远远不够
开源·agent