在 LangChain 中为 LingBot-Vision 配置工具调用,首先需要确认一件事:LingBot-Vision 的 API 是否原生暴露了 function calling 或 tool-use 接口。如果原生支持,LangChain 可以像接其他模型一样使用 bind_tools;如果不支持,则需要把工具描述写进系统提示,并自己对模型的回复做一层结构化解析。这两种路径的配置重点不同,下面分别给出可执行的骨架。
LingBot-Vision 接入 LangChain 工具调用,关键在于把模型的工具协议转换成 LangChain 的标准结构。原生支持时直接绑定工具函数;不支持时用提示词注入工具描述并自行解析 JSON。配置前先确认 API 是否返回工具调用参数,避免把文本回复误当工具调用。所有适配应通过本地回环和最小样例验证。
先确认 API 的工具调用形态
拿到 LingBot-Vision 的 API 后,先做一次最小请求:发送一个包含“查询天气”之类的用户消息,观察响应中是否带有独立的 tool_calls 字段,还是只有纯文本。这个动作决定后面的接入方式。如果响应里有结构化字段,通常可以直接映射到 LangChain 的 AIMessage.tool_calls;如果没有,就只能在提示词层面模拟。
原生支持时的 LangChain 绑定
如果 LingBot-Vision 原生支持工具调用,LangChain 侧的代码大致如下。核心是把工具函数定义好,然后用 bind_tools 传给模型包装器:
from langchain.tools import tool
from langchain_core.messages import HumanMessage
@tool
def get_weather(city: str) -> str:
"""获取指定城市的当前天气"""
return f"{city} 晴,25°C"
# 假设 lingbot_client 是已初始化的客户端
tools = [get_weather]
model = LingBotVisionLangChainModel(client=lingbot_client) # 自定义包装器
model_with_tools = model.bind_tools(tools)
response = model_with_tools.invoke([HumanMessage(content="北京天气如何?")])
print(response.tool_calls)这里的 LingBotVisionLangChainModel 需要实现必要的 LangChain 抽象方法,内部把工具 schema 传给 LingBot-Vision API。bind_tools 会自动把工具函数转换为 JSON Schema,但若模型 API 有自定义格式,还需要在包装器里做一次字段名映射。
提示词层模拟工具调用
当 LingBot-Vision 不支持原生工具参数时,配置重心就变成提示词和解析。通常建议把工具描述写进 system prompt,要求模型输出固定 JSON,例如:
你是一个工具调用助手。当用户请求查询信息时,输出如下 JSON:
{"tool": "get_weather", "args": {"city": "北京"}}
不要输出其他文本。LangChain 侧不需要 bind_tools,而是直接调用模型,然后在代码中解析输出:
import json
from langchain_core.messages import SystemMessage, HumanMessage
messages = [SystemMessage(content=tool_schema_prompt), HumanMessage(content="北京天气?")]
resp = model.invoke(messages)
try:
action = json.loads(resp.content)
except json.JSONDecodeError:
# 落盘 resp.content,检查模型输出中是否有多余字符
action = extract_json_from_text(resp.content)
result = run_tool(action["tool"], action["args"])这种方式的脆弱点是模型可能输出多行注释或前后带反引号,建议在解析时先去除代码块标记,再提取 JSON 片段。
验证清单与边界
- 先用单轮、单工具请求验证工具参数是否被正确解析,再增加多轮对话。
- 检查模型返回的 JSON 中工具名和参数类型是否与定义一致,不一致时在提示词和解析层增加容错。
- 对视觉输入场景,确认工具调用发生在图像理解之后:通常把图像编码和用户问题同时发给模型,模型决定调用哪个工具,然后拿到工具结果后再生成最终回答。
- 如果模型 API 限流或超时,工具调用重试策略要独立于普通文本请求设计,因为一次工具调用可能额外多一轮往返。
- 不要把工具返回内容直接暴露给用户前,先做必要的脱敏或格式化。
以上配置都应在本地先跑通最小样例,再接入实际 agent 流程。LingBot-Vision 的具体字段名、版本差异和资源占用需要结合实际环境确认,无法从通用配置中直接推断。