You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用LangChain结构化聊天Agent工具时JSON解析不一致问题

解决LangChain Structured Chat Agent工具调用JSON解析异常问题

排查方向和修复办法

1. 对齐工具描述的格式

既然get_device_model_data能正常输出JSON,大概率是get_social_insights的工具描述在格式引导上出了问题。LLM会模仿描述里的示例格式,如果你的工具描述里加了反引号包裹的调用示例,模型就会跟着输出带反引号的内容。

  • 修复:把get_social_insights的描述里所有反引号、代码块示例删掉,只用纯文本说明参数要求,比如改成“传入包含account_id字段的JSON对象,account_id是目标Instagram账号ID”。

2. 给Agent的prompt加硬约束

直接在系统prompt里明确规则,避免模型输出格式混乱:

  • 追加一句:调用任何工具时,必须输出纯JSON格式内容,绝对不能用反引号包裹。

3. 给解析器添加容错处理

如果模型偶尔还是输出带反引号的内容,可以给解析器加预处理逻辑,自动剥离多余标记:

from langchain.agents import StructuredChatOutputParser

class CustomParser(StructuredChatOutputParser):
    def parse(self, text: str):
        # 清除前后的```json和```标记,再去除首尾空格
        cleaned_text = text.strip().removeprefix("```json").removesuffix("```").strip()
        return super().parse(cleaned_text)

# 替换原解析器
output_parser = CustomParser.from_llm(llm)

4. 检查LLM的参数设置

更换API密钥后可能间接切换了模型或调整了参数,比如temperature过高会导致输出不稳定。

  • 把temperature设为0,强制模型输出确定性内容;同时确认调用LLM时的格式指令明确要求纯JSON输出。示例:
from langchain.chat_models import ChatOpenAI

llm = ChatOpenAI(
    temperature=0,
    model_name="gpt-3.5-turbo",
    openai_api_key="你的新API密钥"
)

5. 校验工具的参数Schema

确保get_social_insights的参数定义标准清晰,避免模型对参数格式产生混淆。比如用Pydantic定义参数时,字段类型和描述要准确:

from langchain.tools import StructuredTool
from pydantic import BaseModel, Field

class SocialInsightsInput(BaseModel):
    account_id: str = Field(description="目标Instagram账号的ID")

def get_social_insights(account_id: str):
    # 你的工具业务逻辑
    pass

get_social_insights_tool = StructuredTool.from_function(
    func=get_social_insights,
    name="get_social_insights",
    description="获取指定Instagram账号的洞察数据",
    args_schema=SocialInsightsInput
)

内容的提问来源于stack exchange,提问作者Sahil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 07:08:10