7分钟精通Langchain-Chatchat API:从接口解析到实战调用

7分钟精通Langchain-Chatchat API:从接口解析到实战调用

【免费下载链接】Langchain-Chatchat Langchain-Chatchat(原Langchain-ChatGLM)基于 Langchain 与 ChatGLM 等语言模型的本地知识库问答 | Langchain-Chatchat (formerly langchain-ChatGLM), local knowledge based LLM (like ChatGLM) QA app with langchain 【免费下载链接】Langchain-Chatchat 项目地址: https://gitcode.com/GitHub_Trending/la/Langchain-Chatchat

你是否在使用Langchain-Chatchat时,面对API文档无从下手?是否想快速掌握对话接口、知识库调用等核心功能?本文将通过实例解析API路径结构,提供3种调用模式的完整代码示例,让你半小时内具备二次开发能力。

API接口全景图

Langchain-Chatchat的API系统采用RESTful设计风格,所有接口可通过{api_address}/docs访问交互式文档。核心接口分为三大类:通用对话接口、RAG知识库接口和工具调用接口,覆盖从基础对话到高级检索增强的全场景需求。

FastAPI文档界面

接口命名规范

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.mdAgentStatus类中,开发时建议直接引用该枚举。

知识库接口深度解析

/knowledge_base/chat/completions专为RAG(检索增强生成)场景设计,支持本地知识库、临时文件和搜索引擎三种检索模式,比通用对话接口提供更精细的检索控制参数。

本地知识库调用参数

参数名类型描述示例值
modestring检索模式"local_kb"
kb_namestring知识库名称"samples"
top_kinteger检索结果数量3
score_thresholdfloat匹配分值阈值2.0
return_directboolean是否直接返回检索结果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能力的核心组成部分。

工具调用流程

  1. 查询工具列表:
tools = requests.get("http://127.0.0.1:7861/tools").json()["data"]
  1. 构造工具调用请求:
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调用问题:

  1. 请求跟踪:通过/trace接口获取详细调用日志,实现代码frontend/src/services/trace.ts
  2. 性能监控:访问/system/status查看接口响应时间分布
  3. 错误处理:API返回状态码遵循HTTP标准,详细错误信息在msg字段说明

开发环境建议启用debug.ts中的DebugService,可输出完整请求/响应日志到控制台。

生产环境部署建议

  1. 接口安全:所有API需通过JWT认证,配置方法见docs/contributing/api.md
  2. 负载均衡:对/chat/chat/completions等高频接口建议配置Nginx反向代理
  3. 缓存策略:知识库检索结果可通过Redis缓存,实现代码参考server/utils.md
  4. 监控告警:集成Prometheus监控接口调用频率,异常时触发告警

完整部署文档参见docs/install/README_docker.md,包含Docker Compose配置文件和性能优化建议。

接口演进路线

项目API处于持续迭代中,下版本计划新增:

  • 批量知识库操作接口
  • 模型微调任务接口
  • WebSocket实时通知接口

所有接口变更记录在markdown_docs/release.md,建议开发人员定期关注更新日志。

通过本文的API解析和实战示例,你已掌握Langchain-Chatchat二次开发的核心能力。更多接口细节可查阅:

【免费下载链接】Langchain-Chatchat Langchain-Chatchat(原Langchain-ChatGLM)基于 Langchain 与 ChatGLM 等语言模型的本地知识库问答 | Langchain-Chatchat (formerly langchain-ChatGLM), local knowledge based LLM (like ChatGLM) QA app with langchain 【免费下载链接】Langchain-Chatchat 项目地址: https://gitcode.com/GitHub_Trending/la/Langchain-Chatchat

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值