LangChain 是什么
LangChain 是一个开源的Python/JS框架,专门用来开发基于大语言模型(LLM)的应用程序。它的核心价值是: 把"调用AI API"这件事,从简单的一问一答,变成可以使用工具、读取数据、多步推理的复杂应用。
简单说,如果没有LangChain,你调用GPT/Claude的API就是发一个prompt、收一个回复。有了LangChain,你可以让AI自动查数据库、调接口、读文件、执行代码,然后综合这些信息给出答案。
核心概念
1. Chain(链)
最基础的概念。把多个步骤串起来,前一步的输出是后一步的输入。
比如一个"BMC故障诊断链":
用户描述问题 -> AI提取关键词 -> 搜索故障知识库 -> AI生成诊断方案 -> 格式化输出
每一步都是链中的一个节点,LangChain帮你管理数据在节点间的流转。
2. Tool(工具)
让AI能"动手"。你把一个Python函数注册为Tool,AI就可以在需要时自动调用它。
python
from langchain.tools import tool
@tool
def read_bmc_sensor(sensor_name: str) -> str:
"""读取BMC上指定传感器的当前值"""
# SSH到BMC,执行busctl命令,返回结果
result = ssh_execute(f"busctl get-property xyz.openbmc_project.Sensor...")
return result
@tool
def check_service_status(service_name: str) -> str:
"""检查BMC上指定systemd服务的状态"""
result = ssh_execute(f"systemctl status {service_name}")
return result
注册这些工具后,当你问AI"风扇传感器怎么读不到值了",AI会自己决定: 先调用check_service_status检查phosphor-pid-control状态,再调用read_bmc_sensor查看传感器数据,然后综合分析。
3. Agent(代理)
Agent = LLM + Tools + 推理循环。
Agent的运行逻辑是一个循环:
1. 收到用户问题
2. AI思考: 我需要什么信息?
3. AI选择一个Tool执行
4. 拿到Tool的返回结果
5. AI思考: 信息够了吗?
- 不够 -> 回到步骤2,选择下一个Tool
- 够了 -> 生成最终回答
这就是ReAct(Reasoning + Acting)模式,也是目前Agent的主流范式。本质上我现在的工作方式就是这个模式 - 我会思考、调用工具、观察结果、再决定下一步。
4. Memory(记忆)
管理对话历史和长期知识。
- ConversationBufferMemory: 保留完整对话历史
- ConversationSummaryMemory: AI自动总结历史,节省token
- VectorStoreMemory: 把历史存入向量数据库,按相关性检索
5. Retrieval(检索) - RAG的核心
你的文档(PDF/代码/手册)
↓ 切分成小块
↓ 用Embedding模型转成向量
↓ 存入向量数据库(Chroma/FAISS/Milvus)
↓
用户提问 -> 转成向量 -> 在数据库中找最相似的文档块 -> 连同问题一起发给AI
比如你把AT625X2的硬件手册、原理图PDF、所有源代码都建立索引,AI就能在回答问题时自动检索相关内容,而不是凭记忆瞎猜。
一个BMC Agent的伪代码示例
用LangChain构建你的BMC调试Agent大概长这样:
python
from langchain.agents import create_react_agent
from langchain_openai import ChatOpenAI
from langchain.tools import tool
from langchain_community.vectorstores import Chroma
# 1. 选择LLM
llm = ChatOpenAI(model="gpt-4")
# 2. 定义工具
@tool
def ssh_bmc(command: str) -> str:
"""在BMC上执行命令并返回输出"""
return ssh_execute(bmc_ip, "Administrator", "Hkzy@8000", command)
@tool
def search_docs(query: str) -> str:
"""搜索硬件文档和代码注释"""
docs = vector_db.similarity_search(query, k=3)
return "\n".join([d.page_content for d in docs])
@tool
def search_fault_cases(symptom: str) -> str:
"""搜索历史故障案例库"""
cases = fault_db.similarity_search(symptom, k=3)
return "\n".join([c.page_content for c in cases])
# 3. 创建Agent
agent = create_react_agent(
llm=llm,
tools=[ssh_bmc, search_docs, search_fault_cases],
prompt=system_prompt # 包含BMC领域知识的系统提示词
)
# 4. 运行
response = agent.invoke("phosphor-pid-control启动失败了,帮我排查")
# Agent会自动:
# 1. 调用ssh_bmc("systemctl status phosphor-pid-control")
# 2. 调用ssh_bmc("journalctl -u phosphor-pid-control -n 50")
# 3. 调用search_fault_cases("pid control启动失败")
# 4. 根据日志和历史案例给出诊断
LangChain的生态位
- LangChain: 最早最成熟的框架,生态最大,但被批评过度抽象
- LlamaIndex: 更专注于RAG(数据检索)场景,如果你的Agent主要是"查文档回答问题",它更合适
- CrewAI: 专注多Agent协作
- AutoGen(微软): 多Agent对话框架
- Dify/FastGPT: 低代码Agent平台,拖拽式构建,适合快速验证想法
和你现在的方式对比
你现在用Gemini + skill/workflow的方式:
- 优点: 零开发成本,AI能力强(Gemini本身就很强)
- 缺点: 依赖平台,无法定制推理流程,无法接入自己的知识库
用LangChain自建Agent:
- 优点: 完全可控,可以接入任意数据源和工具,可部署为团队服务
- 缺点: 需要开发和维护,LLM调用有成本,需要自己处理各种边界情况
如果你想试水,建议从一个最小的LangChain Agent开始: 就两三个tool + 一个简单的RAG,跑通"自动SSH到BMC查日志并分析"这个场景。这样你就能直观感受到和现在方式的区别了。