这次我们来看一个 LangChain V1.3 的实战学习指南。如果你正在寻找一套能快速上手、覆盖 Agent 智能体、RAG 知识库和实际项目开发的教程,这篇文章就是为你准备的。LangChain 作为当前构建大语言模型应用的主流框架,其核心价值在于将复杂的 AI 能力模块化、流程化,让开发者能更专注于业务逻辑。V1.3 版本带来了更清晰的 API 设计和更强的稳定性,是入门和进阶的理想起点。
本文不会空谈概念,而是直接切入实战。我们将重点关注三个核心模块:如何构建一个能调用工具的智能体(Agent),如何搭建一个能回答私有文档问题的 RAG 系统,以及如何将这些组件整合成一个可运行的 AI 项目。整个过程会从零开始,提供可复现的代码和环境配置,确保你能在自己的机器上跑通。无论你是想为现有系统添加 AI 能力,还是计划开发全新的 AI 应用,这篇文章都能提供一条清晰的路径。
1. 核心能力速览
在深入代码之前,我们先快速了解 LangChain V1.3 在本次学习路径中涵盖的核心能力、技术栈和资源要求,这有助于你判断是否适合继续深入。
能力项
说明
项目类型
大语言模型应用开发框架(Python)
核心学习模块
Agent(智能体)、RAG(检索增强生成)、项目实战
主要依赖
langchain, langchain-community, 向量数据库(如 Chroma),大模型 API(如 OpenAI、智谱、通义等)或本地模型
推荐硬件
开发测试对 GPU 无强制要求,主要依赖 CPU 和网络(调用云端 API)。如需本地部署嵌入模型或 LLM,则需相应 GPU 资源。
显存占用
不确定,需按实际选择的本地模型测试。使用云端 API 则无本地显存压力。
启动方式
通过 Python 脚本或 Jupyter Notebook 运行,无一键启动包,需手动配置环境。
是否支持 API
LangChain 本身是开发框架,用于构建 API 服务(如 FastAPI)。它支持调用外部 API(如大模型、工具)。
是否支持批量任务
支持,可通过框架的 batch 方法或异步处理实现文档批量嵌入、批量问答等。
适合场景
1. 为现有系统集成智能问答和决策能力。 2. 构建基于私有知识库的客服、咨询系统。 3. 开发能自动执行多步骤任务的 AI 助手。 4. 学习现代 AI 应用架构和最佳实践。
2. 适用场景与使用边界
LangChain 是一个强大的工具,但明确其边界能让你更有效地使用它。
它非常适合:
快速原型验证 :当你有一个 AI 应用的想法,需要快速验证流程可行性时,LangChain 提供的标准化组件能极大缩短开发时间。
集成复杂工作流 :需要串联大模型调用、工具使用(计算、搜索、查数据库)、记忆管理和条件判断的场景。
处理私有或领域知识 :拥有大量内部文档(PDF、Word、网页),需要构建一个能准确回答其中问题的系统,RAG 是当前最实用的方案。
学习 AI 应用开发范式 :通过 LangChain 可以系统地理解 Agent、Chain、Memory、Retriever 等核心概念及其实现方式。
它可能不是最佳选择:
超高性能、超低延迟场景 :LangChain 的抽象层会带来一定的开销。对延迟极其敏感的线上服务,可能需要更底层的优化或直接调用模型 SDK。
极其简单的单次模型调用 :如果只是需要向 ChatGPT 发一个问题并获取答案,直接使用 openai 库更简单直接。
希望完全“黑箱”,无需理解原理 :LangChain 需要你对其组件有一定了解才能灵活运用和调试。如果追求完全封装的 SaaS 体验,可以考虑 Dify、Coze 等平台。
合规与安全边界:
数据隐私 :使用云端大模型 API 时,你的提示词和发送的数据会离开本地环境。涉及敏感数据时,务必确认服务商的隐私协议,或考虑使用可本地部署的开源模型。
工具调用安全 :Agent 可以调用外部工具(如执行代码、操作文件)。必须严格限制其工具权限,避免执行危险操作,最好在沙箱环境中运行。
事实性与版权 :RAG 系统依赖于检索到的文档,如果知识库本身信息有误或过时,生成内容也可能出错。同时,确保构建知识库的文档拥有合法使用权。
3. 环境准备与前置条件
开始编码前,请确保你的开发环境已就绪。以下是通用清单,具体版本可根据项目调整。
操作系统 :Windows 10/11, macOS, 或 Linux (推荐 Ubuntu 20.04+)。
Python 版本 :Python 3.8 至 3.11。建议使用 3.10 以获得最佳兼容性。可使用 python --version 检查。
包管理工具 :pip 最新版。建议使用虚拟环境(venv 或 conda)隔离项目依赖。
代码编辑器 :VS Code, PyCharm 等,安装 Python 插件。
网络访问 :能稳定访问 PyPI 下载包。如需使用 OpenAI、智谱等国内外的云端 API,需确保能访问对应服务端点。
(可选) 本地模型 :如果计划使用本地模型(如通过 Ollama、vLLM 部署),需准备相应的 GPU 环境和模型文件。
4. 安装部署与启动方式
LangChain 是一个库,而非一个独立服务,因此“启动”指的是安装依赖并运行你的脚本。
步骤 1:创建并激活虚拟环境
这是避免包冲突的最佳实践。
BASH
复制
2
python -m venv langchain_env
6
langchain_env\Scripts\activate
8
source langchain_env/bin/activate
步骤 2:安装核心库
我们将安装 LangChain 核心库、社区工具库以及常用的向量数据库客户端和 Web 框架。
BASH
复制
2
pip install langchain langchain-community langchain-core
11
pip install pypdf python-docx
14
pip install fastapi uvicorn
17
pip install python-dotenv
步骤 3:配置 API 密钥
在项目根目录创建 .env 文件,用于安全存储密钥。
BASH
复制
3
OPENAI_API_KEY=your_openai_api_key_here
4
OPENAI_BASE_URL=https://api.openai.com/v1
7
ZHIPUAI_API_KEY=your_zhipuai_api_key_here
在 Python 脚本中,使用 dotenv 加载密钥:
PYTHON
复制
1
from dotenv import load_dotenv
5
api_key = os.getenv("OPENAI_API_KEY" )
步骤 4:验证安装
创建一个简单的 test_install.py 脚本,测试 LangChain 和基础环境。
PYTHON
复制
2
from langchain_openai import ChatOpenAI
3
from dotenv import load_dotenv
9
llm = ChatOpenAI(model="gpt-3.5-turbo" , api_key=os.getenv("OPENAI_API_KEY" ))
13
response = llm.invoke("Hello, LangChain!" )
14
print ("安装成功!模型回复:" , response.content)
15
except Exception as e:
16
print (f"出现错误,请检查API密钥和网络:{e} " )
运行 python test_install.py,如果看到模型回复,说明基础环境配置成功。
5. 功能测试与效果验证
我们将分三个核心部分进行实战测试:智能体(Agent)、RAG 知识库和项目集成。
5.1 Agent 智能体实战:让 AI 使用工具
Agent 的核心是让大模型能够根据目标,自主决定调用哪些工具(如搜索、计算、查数据库)来完成任务。
测试目的 :构建一个能回答“今天北京天气如何,并换算成华氏度是多少?”的智能体。它需要先调用搜索工具获取天气,再调用计算工具进行单位换算。
操作步骤 :
定义工具 :我们模拟两个工具,一个用于搜索,一个用于计算。
创建 Agent :使用 LangChain 提供的 create_react_agent(ReAct 范式)来组装。
运行并观察 :看 Agent 如何思考并逐步调用工具。
PYTHON
复制
2
from langchain_openai import ChatOpenAI
3
from langchain.agents import create_react_agent, AgentExecutor
4
from langchain.tools import Tool
5
from langchain import hub
6
from dotenv import load_dotenv
12
def search_weather (query: str ) -> str :
13
"""模拟搜索天气的工具。实际应用中可替换为真实API,如 SerpAPI。"""
14
print (f"[工具调用] 搜索天气,查询词:{query} " )
16
return "北京今天晴,气温 25 摄氏度。"
18
def temperature_converter (expression: str ) -> str :
19
"""模拟温度换算工具。实际可以是计算器或代码执行工具。"""
20
print (f"[工具调用] 计算表达式:{expression} " )
23
if "25" in expression and "华氏度" in expression:
24
result = 25 * 9 /5 + 32
25
return f"{result} 华氏度"
27
return f"计算了表达式 `{expression} `,但本示例只处理特定查询。"
28
except Exception as e:
35
description="当需要查询某个城市的实时天气时使用此工具。输入应为城市名。"
39
name="TemperatureConverter" ,
40
func=temperature_converter,
41
description="当需要进行温度单位换算(如摄氏度转华氏度)时使用此工具。输入应包含数值和换算说明。"
45
llm = ChatOpenAI(model="gpt-3.5-turbo" , temperature=0 , api_key=os.getenv("OPENAI_API_KEY" ))
48
prompt = hub.pull("hwchase17/react" )
51
tools = [weather_tool, calc_tool]
52
agent = create_react_agent(llm, tools, prompt)
55
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True , handle_parsing_errors=True )
58
if __name__ == "__main__" :
59
question = "今天北京天气如何,并换算成华氏度是多少?"
60
print (f"用户问题:{question} \n" )
61
result = agent_executor.invoke({"input" : question})
62
print (f"\n最终答案:{result['output' ]} " )
预期结果与判断 :
运行脚本后,你应该在控制台看到类似以下的输出(verbose=True 会显示详细思考过程):
TEXT
复制
1
用户问题:今天北京天气如何,并换算成华氏度是多少?
3
> 进入新的 AgentExecutor 链...
4
思考:我需要先查询北京的天气,然后再将摄氏度转换为华氏度。
9
思考:我得到了气温是25摄氏度。现在需要将其转换为华氏度。公式是 F = C * 9/5 + 32。
10
行动:TemperatureConverter
12
[工具调用] 计算表达式:25 * 9/5 + 32
14
思考:我现在有了所有信息,可以给出最终答案了。
16
最终答案:北京今天天气晴朗,气温为 25 摄氏度,换算成华氏度是 77 华氏度。
18
最终答案:北京今天天气晴朗,气温为 25 摄氏度,换算成华氏度是 77 华氏度。
成功标准 :Agent 正确识别了需要先后调用两个工具,并输出了包含天气和换算结果的完整答案。
常见失败原因 :
API 密钥错误 :检查 .env 文件和环境变量加载。
网络问题 :无法访问 OpenAI API。
提示词不匹配 :如果 hub.pull 失败,可能是网络问题,可以手动定义提示词。
5.2 RAG 知识库实战:构建私有文档问答系统
RAG 系统通过检索(Retrieval)相关文档片段,将其作为上下文提供给大模型,从而生成(Generation)更准确、基于知识的回答。
测试目的 :使用本地 PDF 文档构建一个微型知识库,并实现基于内容的问答。
操作步骤 :
文档加载与分割 :读取 PDF,将长文本切分成适合检索的片段(Chunks)。
向量化与存储 :将文本片段转换为向量(Embeddings),并存入向量数据库(Chroma)。
检索与生成 :根据用户问题检索最相关的文档片段,将其与问题一起提交给大模型生成答案。
PYTHON
复制
2
from langchain_community.document_loaders import PyPDFLoader
3
from langchain_text_splitters import RecursiveCharacterTextSplitter
4
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
5
from langchain_community.vectorstores import Chroma
6
from langchain.chains import create_retrieval_chain
7
from langchain.chains.combine_documents import create_stuff_documents_chain
8
from langchain_core.prompts import ChatPromptTemplate
9
from dotenv import load_dotenv
18
loader = PyPDFLoader("./docs/sample.pdf" )
19
documents = loader.load()
22
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500 , chunk_overlap=50 )
23
texts = text_splitter.split_documents(documents)
24
print (f"文档被分割成 {len (texts)} 个文本块。" )
27
embeddings = OpenAIEmbeddings(api_key=os.getenv("OPENAI_API_KEY" ))
29
vectorstore = Chroma.from_documents(documents=texts, embedding=embeddings, persist_directory="./chroma_db" )
34
retriever = vectorstore.as_retriever(search_kwargs={"k" : 3 })
38
你是一个专业的助手,请根据以下上下文来回答问题。如果你不知道答案,就说不知道,不要编造。
42
prompt = ChatPromptTemplate.from_template(prompt_template)
45
llm = ChatOpenAI(model="gpt-3.5-turbo" , temperature=0 , api_key=os.getenv("OPENAI_API_KEY" ))
48
combine_docs_chain = create_stuff_documents_chain(llm, prompt)
51
rag_chain = create_retrieval_chain(retriever, combine_docs_chain)
54
if __name__ == "__main__" :
56
question = "这份文档的主要目的是什么?"
57
print (f"提问:{question} " )
58
result = rag_chain.invoke({"input" : question})
59
print (f"答案:{result['answer' ]} " )
60
print (f"\n参考来源(前3个片段):" )
61
for i, doc in enumerate (result['context' ]):
62
print (f"[片段{i+1 } ] {doc.page_content[:200 ]} ..." )
预期结果与判断 :
系统会从你的 PDF 中检索出与问题最相关的文本片段,并生成一个基于这些片段的答案。
成功标准 :答案内容与 PDF 文档实际内容相符,且回答中引用了文档中的信息。
常见失败原因 :
PDF 路径错误 :确保 ./docs/sample.pdf 文件存在。
Embedding 模型调用失败 :检查 API 密钥和网络。
检索结果不相关 :可以调整 chunk_size(如改为 1000)、chunk_overlap(如改为 100)或检索数量 k。
答案仍胡编乱造 :检查提示词是否明确要求“根据上下文”,并确认检索到的上下文确实包含答案信息。
5.3 项目集成实战:构建一个简单的 AI 服务
我们将把 Agent 和 RAG 的能力整合到一个简单的 FastAPI 服务中,提供 Web API。
测试目的 :创建一个 HTTP 服务,提供两个端点:一个用于执行工具调用的 Agent 任务,一个用于进行知识库问答。
操作步骤 :
创建 FastAPI 应用。
定义两个 POST 接口。
集成前面编写的 Agent 和 RAG 逻辑。
PYTHON
复制
2
from fastapi import FastAPI, HTTPException
3
from pydantic import BaseModel
4
from typing import Optional
9
from langchain_openai import ChatOpenAI
10
from langchain_community.vectorstores import Chroma
11
from langchain_openai import OpenAIEmbeddings
12
from dotenv import load_dotenv
17
app = FastAPI(title="LangChain AI 服务 Demo" )
20
llm = ChatOpenAI(model="gpt-3.5-turbo" , api_key=os.getenv("OPENAI_API_KEY" ))
21
embeddings = OpenAIEmbeddings(api_key=os.getenv("OPENAI_API_KEY" ))
25
vectorstore = Chroma(persist_directory="./chroma_db" , embedding_function=embeddings)
26
retriever = vectorstore.as_retriever(search_kwargs={"k" : 3 })
29
print ("未找到向量数据库,RAG 功能不可用。" )
33
class AgentRequest (BaseModel ):
36
class RAGRequest (BaseModel ):
40
@app.post("/agent/ask" )
41
async def ask_agent (req: AgentRequest ):
49
response = llm.invoke(req.question)
50
return {"answer" : response.content, "source" : "agent_llm" }
51
except Exception as e:
52
raise HTTPException(status_code=500 , detail=f"Agent处理失败: {str (e)} " )
56
async def ask_rag (req: RAGRequest ):
61
raise HTTPException(status_code=503 , detail="RAG 知识库未就绪,请先构建向量数据库。" )
63
from langchain.chains import create_retrieval_chain
64
from langchain.chains.combine_documents import create_stuff_documents_chain
65
from langchain_core.prompts import ChatPromptTemplate
67
prompt_template = """请根据以下上下文回答问题:
71
prompt = ChatPromptTemplate.from_template(prompt_template)
72
combine_docs_chain = create_stuff_documents_chain(llm, prompt)
73
rag_chain = create_retrieval_chain(retriever, combine_docs_chain)
75
result = rag_chain.invoke({"input" : req.question})
77
"answer" : result['answer' ],
78
"sources" : [doc.page_content[:300 ] for doc in result['context' ]]
80
except Exception as e:
81
raise HTTPException(status_code=500 , detail=f"RAG处理失败: {str (e)} " )
84
async def health_check ():
85
return {"status" : "ok" , "rag_ready" : RAG_READY}
87
if __name__ == "__main__" :
89
uvicorn.run(app, host="127.0.0.1" , port=8000 )
运行与测试 :
在终端启动服务:python app.py
打开浏览器,访问 http://127.0.0.1:8000/docs,你会看到自动生成的 API 文档。
在 /rag/ask 或 /agent/ask 的 “Try it out” 区域输入问题,点击 Execute 进行测试。
预期结果 :服务正常启动,并能通过 HTTP 接口接收问题并返回 JSON 格式的答案。
常见失败原因 :
端口冲突 :默认端口 8000 被占用,可在 uvicorn.run 中修改 port 参数。
依赖缺失 :确保安装了 fastapi 和 uvicorn。
向量库路径错误 :确保 ./chroma_db 目录存在(由 rag_demo.py 生成)。
6. 接口 API 与批量任务
6.1 接口 API 调用示例
上述 FastAPI 服务提供了标准的 RESTful API。你可以使用任何 HTTP 客户端进行调用。
Python 调用示例:
PYTHON
复制
5
agent_url = "http://127.0.0.1:8000/agent/ask"
6
agent_payload = {"question" : "计算一下 2 的 10 次方是多少?" }
7
agent_headers = {'Content-Type' : 'application/json' }
9
agent_response = requests.post(agent_url, data=json.dumps(agent_payload), headers=agent_headers)
10
print ("Agent 回答:" , agent_response.json())
13
rag_url = "http://127.0.0.1:8000/rag/ask"
14
rag_payload = {"question" : "我的文档中提到了哪些关键技术?" }
15
rag_response = requests.post(rag_url, data=json.dumps(rag_payload), headers=agent_headers)
16
print ("RAG 回答:" , rag_response.json())
cURL 调用示例:
BASH
复制
2
curl -X POST "http://127.0.0.1:8000/rag/ask" \
3
-H "Content-Type: application/json" \
4
-d '{"question": "文档的作者是谁?"}'
6.2 批量任务处理
在实际应用中,经常需要批量处理文档或批量提问。
批量文档入库(RAG 预处理):
PYTHON
复制
2
from langchain_community.document_loaders import (
5
UnstructuredWordDocumentLoader,
8
def batch_process_documents (doc_dir: str , persist_dir: str = "./chroma_db_batch" ):
9
"""批量处理一个目录下的所有支持格式的文档"""
11
supported_extensions = {
14
'.docx' : UnstructuredWordDocumentLoader,
18
for ext, loader_class in supported_extensions.items():
19
file_pattern = os.path.join(doc_dir, f"*{ext} " )
20
for file_path in glob.glob(file_pattern):
21
print (f"正在处理:{file_path} " )
23
loader = loader_class(file_path)
26
except Exception as e:
27
print (f" 处理文件 {file_path} 时出错:{e} " )
34
from langchain_text_splitters import RecursiveCharacterTextSplitter
35
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000 , chunk_overlap=100 )
36
splits = text_splitter.split_documents(all_docs)
37
print (f"共处理 {len (all_docs)} 个文档,分割为 {len (splits)} 个文本块。" )
40
from langchain_community.vectorstores import Chroma
41
from langchain_openai import OpenAIEmbeddings
42
embeddings = OpenAIEmbeddings()
43
vectorstore = Chroma.from_documents(
46
persist_directory=persist_dir
48
print (f"向量数据库已保存至:{persist_dir} " )
批量问答:
PYTHON
复制
1
def batch_qa (questions: list , rag_chain ):
6
answer = rag_chain.invoke({"input" : q})
9
"answer" : answer['answer' ],
10
"sources" : [doc.page_content[:200 ] for doc in answer['context' ]]
12
except Exception as e:
13
results.append({"question" : q, "error" : str (e)})
7. 资源占用与性能观察
使用 LangChain 开发应用,性能瓶颈主要来自大模型调用和向量检索。
大模型调用开销 :
API 调用 :延迟和费用取决于云端 API(如 GPT-4)。注意设置合理的超时(timeout)和重试逻辑。
本地模型 :延迟和显存占用取决于模型大小和你的硬件。使用 nvidia-smi(Linux)或任务管理器(Windows)监控 GPU 显存。
向量检索开销 :
嵌入(Embedding) :将文本转换为向量是 CPU/GPU 密集型操作,首次构建知识库时耗时较长。批量处理时建议使用异步或队列。
检索(Retrieval) :从 Chroma 等向量数据库检索,速度很快,但检索数量 k 越大,返回的上下文越长,后续 LLM 处理的 token 也越多,成本越高。
Agent 思考开销 :Agent 的 ReAct 等模式需要多次调用 LLM(一次思考,一次行动,可能循环),比单次问答消耗更多 token 和时间。
内存占用 :加载大量文档到内存进行分割时,会消耗较多 RAM。对于超大文档集,建议流式读取和分批处理。
优化建议 :
缓存 :对频繁相同的查询结果进行缓存。
异步处理 :对于批量任务,使用 asyncio 或任务队列(如 Celery)。
调整参数 :合理设置文本块大小(chunk_size)、重叠(overlap)和检索数量(k),在召回率和成本/速度间取得平衡。
使用更轻量的模型 :对于 Embedding,可考虑 text-embedding-3-small;对于简单任务,可使用 gpt-3.5-turbo 而非 GPT-4。
8. 常见问题与排查方法
在开发过程中,你可能会遇到以下问题:
问题现象
可能原因
排查方式
解决方案
ModuleNotFoundError: No module named ‘langchain_community‘
包未安装或版本不兼容
`pip list
grep langchain` 检查已安装版本
openai.error.AuthenticationError
API 密钥错误或未设置
检查 .env 文件内容,在 Python 中 print(os.getenv(‘OPENAI_API_KEY‘))
确保密钥正确,且已通过 load_dotenv() 加载
Agent 不调用工具,直接胡编答案
1. 工具描述不清晰 2. LLM 温度(temperature)过高 3. 提示词不合适
1. 检查工具 description 是否准确 2. 设置 temperature=0 3. 使用 verbose=True 查看思考过程
优化工具描述,使用更明确的提示词(如 hub.pull(“hwchase17/react”))
RAG 回答与文档内容无关
1. 检索到的片段不相关 2. 提示词未强制要求基于上下文
1. 打印 result[‘context‘] 查看检索结果 2. 检查提示词模板
1. 调整文本分割参数或尝试不同 Embedding 模型 2. 在提示词中加入“仅根据上下文回答”
向量数据库检索速度慢
1. 向量库过大 2. 未使用持久化,每次重启都重新生成
1. 检查向量库中文档数量 2. 确认使用了 persist_directory
1. 考虑分库或使用更高效的向量数据库(如 Pinecone, Qdrant) 2. 确保从持久化目录加载
服务启动失败 Address already in use
端口被占用
`netstat -ano
findstr :8000(Win) 或lsof -i:8000` (Mac/Linux)
批量处理时内存溢出(OOM)
一次性加载所有文档到内存
监控任务管理器内存使用
使用流式加载器,或分批处理文档
9. 最佳实践与使用建议
项目结构 :保持代码清晰。建议按功能模块组织:
TEXT
复制
2
├── app.py # FastAPI 主应用
3
├── agents/ # Agent 相关模块
8
│ ├── vector_store.py # 向量库初始化与管理
9
│ └── chains.py # 检索链定义
14
├── .env # 环境变量(加入.gitignore)
15
└── requirements.txt # 依赖列表
配置管理 :将所有配置(模型名称、API Base URL、温度、块大小等)集中到配置文件(如 config.yaml)或环境变量中,便于不同环境切换。
错误处理与日志 :在关键步骤(API调用、工具执行、文件IO)添加 try...except,并记录日志,便于排查。
测试先行 :为每个核心功能(如工具函数、检索链)编写单元测试,确保代码健壮性。
版本控制 :使用 Git。将 .env、chroma_db/ 等包含密钥和大型数据文件的目录加入 .gitignore。
安全与合规 :
API 密钥 :永远不要硬编码在代码中或提交到版本库。
用户输入 :对传入 Agent 的用户指令进行基本的清理和检查,防止 Prompt 注入。
工具权限 :限制工具能访问的系统资源和数据范围。
数据来源 :确保用于构建 RAG 知识库的文档拥有合法使用权。
10. 总结与下一步
通过本文的实践,你应该已经掌握了 LangChain V1.3 的核心用法:从搭建环境、构建能调用工具的智能体(Agent),到创建基于私有知识的问答系统(RAG),最后将它们集成为一个可提供 API 服务的简单项目。这条路径覆盖了当前 AI 应用开发中最主流的两个场景。
最值得尝试的下一步:
替换真实工具 :将示例中的模拟搜索和计算工具,替换为真实的 API(如 SerpAPI 进行网页搜索,或连接公司内部数据库)。
优化 RAG 流程 :尝试不同的文本分割器、不同的 Embedding 模型(如开源模型 bge-small-zh),以及高级检索技巧(如重排序 Rerank、多向量检索等),以提升问答准确率。
探索更复杂的 Agent 框架 :本文使用了基础的 ReAct Agent。可以尝试 LangGraph 来构建有状态、可循环、多角色的复杂智能体工作流。
加入记忆(Memory) :为你的 Agent 或聊天链添加对话历史记忆,使其能进行多轮上下文相关的对话。
前端界面 :使用 Gradio 或 Streamlit 快速为你的 AI 服务构建一个图形化界面,方便非开发者测试和使用。
最容易踩的坑 :
忽视提示词工程 :Agent 和 RAG 的效果严重依赖提示词。多花时间优化提示词,效果提升可能比换模型更显著。
向量检索质量差 :如果检索不到正确答案,后面 LLM 再强也没用。务必重视文档预处理和检索策略。
成本失控 :在开发阶段,注意监控 API 调用次数和 Token 消耗,避免因循环调用或大批量处理产生意外高额费用。
建议将本文的代码作为你的“脚手架”,在实际需求中不断迭代和丰富。遇到问题时,多查阅 LangChain 官方文档 和社区讨论,这是最快的学习方式。