7分钟精通Langchain-Chatchat API:从接口解析到实战调用
你是否在使用Langchain-Chatchat时,面对API文档无从下手?是否想快速掌握对话接口、知识库调用等核心功能?本文将通过实例解析API路径结构,提供3种调用模式的完整代码示例,让你半小时内具备二次开发能力。
API接口全景图
Langchain-Chatchat的API系统采用RESTful设计风格,所有接口可通过{api_address}/docs访问交互式文档。核心接口分为三大类:通用对话接口、RAG知识库接口和工具调用接口,覆盖从基础对话到高级检索增强的全场景需求。
接口命名规范
API路径遵循/模块/功能/操作的三级命名规则,例如:
/chat/chat/completions:通用对话接口/knowledge_base/chat/completions:知识库对话接口/tools:工具列表查询接口
完整接口定义可参考源代码:
通用对话接口实战
/chat/chat/completions是系统最核心的接口,兼容大模型SDK格式,支持纯LLM对话、Agent工具调用和半Agent模式三种使用方式。
纯LLM对话(基础模式)
无需任何工具调用,直接与大模型交互:
base_url = "http://127.0.0.1:7861/chat"
data = {
"model": "qwen1.5-chat",
"messages": [
{"role": "user", "content": "请用100字介绍Langchain-Chatchat"},
{"role": "assistant", "content": "Langchain-Chatchat是基于Langchain与大模型的知识库问答系统"},
{"role": "user", "content": "它支持哪些API调用模式?"}
],
"stream": True,
"temperature": 0.7
}
# 使用大模型SDK调用
import openai
client = openai.Client(base_url=base_url, api_key="EMPTY")
for chunk in client.chat.completions.create(**data):
print(chunk.choices[0].delta.content or "", end="")
该接口返回SSE(Server-Sent Events)格式数据流,每个chunk包含部分响应内容。生产环境中建议使用frontend/src/services/chat.ts中封装的ChatService类,已处理断线重连和流数据整合。
Agent工具调用(高级模式)
通过传入tools参数启用Agent能力,大模型会自动判断是否需要调用工具:
data = {
"model": "qwen1.5-chat",
"messages": [{"role": "user", "content": "37+48等于多少"}],
"stream": True,
"tools": requests.get("http://127.0.0.1:7861/tools").json()["data"]
}
response = requests.post(f"{base_url}/chat/completions", json=data, stream=True)
for line in response.iter_lines():
if line.startswith(b"data: "):
chunk = json.loads(line[6:])
if chunk["status"] == 7: # AgentStatus.tool_end
print(f"计算结果: {chunk['choices'][0]['delta']['tool_calls'][0]['tool_output']}")
Agent执行过程包含多个状态阶段,通过status字段标识:
- 1: LLM思考开始
- 4: 工具调用决策
- 6: 工具执行开始
- 7: 工具执行结束
状态常量定义在markdown_docs/server/api.md的AgentStatus类中,开发时建议直接引用该枚举。
知识库接口深度解析
/knowledge_base/chat/completions专为RAG(检索增强生成)场景设计,支持本地知识库、临时文件和搜索引擎三种检索模式,比通用对话接口提供更精细的检索控制参数。
本地知识库调用参数
| 参数名 | 类型 | 描述 | 示例值 |
|---|---|---|---|
| mode | string | 检索模式 | "local_kb" |
| kb_name | string | 知识库名称 | "samples" |
| top_k | integer | 检索结果数量 | 3 |
| score_threshold | float | 匹配分值阈值 | 2.0 |
| return_direct | boolean | 是否直接返回检索结果 | false |
三种调用模式对比
1. 本地知识库模式
base_url = "http://127.0.0.1:7861/knowledge_base/local_kb/samples"
data = {
"model": "qwen2-instruct",
"messages": [{"role": "user", "content": "如何高质量提问?"}],
"stream": True,
"extra_body": {"top_k": 3, "return_direct": True}
}
该模式需提前通过knowledge_base/create_knowledge_base接口创建知识库,适合企业内部文档问答场景。
2. 文件对话模式
# 先上传文件获取knowledge_id
upload_url = "http://127.0.0.1:7861/knowledge_base/upload_temp_docs"
files = {"file": open("manual.pdf", "rb")}
knowledge_id = requests.post(upload_url, files=files).json()["data"]["knowledge_id"]
# 使用临时知识库ID调用
base_url = f"http://127.0.0.1:7861/knowledge_base/temp_kb/{knowledge_id}"
临时文件对话功能由frontend/src/services/knowledge.ts中的KnowledgeService类封装,适合用户上传即时文件的问答场景。
3. 搜索引擎模式
engine_name = "duckduckgo" # 支持bing/duckduckgo/metaphor
base_url = f"http://127.0.0.1:7861/knowledge_base/search_engine/{engine_name}"
集成搜索引擎的实现代码位于libs/chatchat-server/chatchat/knowledge_base目录,支持自定义搜索结果处理逻辑。
工具调用接口详解
/tools接口返回系统支持的所有工具列表,包括计算器、知识库检索、图像生成等功能模块。每个工具包含名称、参数定义和调用示例,是Agent能力的核心组成部分。
工具调用流程
- 查询工具列表:
tools = requests.get("http://127.0.0.1:7861/tools").json()["data"]
- 构造工具调用请求:
data = {
"model": "qwen1.5-chat",
"messages": [{"role": "user", "content": "37+48等于多少"}],
"stream": True,
"tool_choice": "calculate", # 指定调用计算器工具
"tool_input": {"text": "37+48"} # 手动传入参数
}
工具实现代码位于libs/chatchat-server/chatchat/tools目录,开发人员可通过继承BaseTool类扩展自定义工具。
接口调试与监控
系统提供完善的调试工具链,帮助开发人员定位API调用问题:
- 请求跟踪:通过
/trace接口获取详细调用日志,实现代码frontend/src/services/trace.ts - 性能监控:访问
/system/status查看接口响应时间分布 - 错误处理:API返回状态码遵循HTTP标准,详细错误信息在
msg字段说明
开发环境建议启用debug.ts中的DebugService,可输出完整请求/响应日志到控制台。
生产环境部署建议
- 接口安全:所有API需通过JWT认证,配置方法见docs/contributing/api.md
- 负载均衡:对
/chat/chat/completions等高频接口建议配置Nginx反向代理 - 缓存策略:知识库检索结果可通过Redis缓存,实现代码参考server/utils.md
- 监控告警:集成Prometheus监控接口调用频率,异常时触发告警
完整部署文档参见docs/install/README_docker.md,包含Docker Compose配置文件和性能优化建议。
接口演进路线
项目API处于持续迭代中,下版本计划新增:
- 批量知识库操作接口
- 模型微调任务接口
- WebSocket实时通知接口
所有接口变更记录在markdown_docs/release.md,建议开发人员定期关注更新日志。
通过本文的API解析和实战示例,你已掌握Langchain-Chatchat二次开发的核心能力。更多接口细节可查阅:
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




