langchain agent实战项目
时间: 2025-05-10 22:36:25 浏览: 42
### 关于 LangChain Agent 的实际项目案例与示例
LangChain 提供了一种灵活的方式来构建和管理 Agents,使其能够通过调用外部工具完成复杂的任务。以下是几个常见的实战项目案例及其代码实现。
#### 1. 使用 OpenAI 函数代理创建简单问答系统
此示例展示了如何利用预定义的提示模板快速设置一个基于函数的代理:
```python
from langchain.agents import load_tools, initialize_agent
from langchain.llms import OpenAI
# 初始化 LLM 和 工具链
llm = OpenAI(temperature=0)
tools = load_tools(["serpapi", "llm-math"], llm=llm)
# 创建 agent 并指定其行为模式
agent_chain = initialize_agent(tools, llm, agent="zero-shot-react-description", verbose=True)
# 测试运行
result = agent_chain.run("谁赢得了2022年世界杯?")
print(result) # 输出结果并展示推理过程[^1]
```
上述代码片段中,`initialize_agent` 方法被用来初始化一个零样本反应描述型代理 (Zero-Shot React Description),它可以根据上下文动态决定使用哪些工具来解决问题。
---
#### 2. 构建多步骤 SQL 查询解析器
如果目标是从自然语言查询转换成数据库操作,则可以考虑如下方式:
```python
from langchain.agents.agent_toolkits import create_sql_agent
from langchain.sql_database import SQLDatabase
from langchain.llms.openai import OpenAI
from langchain.agents import AgentExecutor
from langchain.agents.agent_types import AgentType
db_url = "sqlite:///your-database.db"
database = SQLDatabase.from_uri(db_url)
llm = OpenAI(temperature=0)
sql_agent_executor = create_sql_agent(
llm=llm,
toolkit=create_sql_agent(llm=llm, db=database),
agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
verbose=True
)
response = sql_agent_executor.run("告诉我销售额最高的产品是什么?")
print(response) # 返回对应的产品名称以及销售金额[^2]
```
这里的关键在于 `create_sql_agent` 函数的应用,它可以自动将用户的提问转化为针对特定关系型数据库的有效SQL语句执行请求。
---
#### 3. 综合多种工具解决复杂问题
对于更高级别的需求——例如需要结合搜索引擎、文档检索以及其他自定义插件共同工作时,可以通过组合不同类型的 agents 来达成目的:
```python
from langchain.document_loaders import DirectoryLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains.question_answering import load_qa_chain
from langchain.prompts.prompt import PromptTemplate
from langchain.chat_models import ChatOpenAI
import os
loader = DirectoryLoader('./data', glob='*.txt')
documents = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_documents(documents)
embeddings = OpenAIEmbeddings()
docsearch = Chroma.from_documents(texts, embeddings).as_retriever(search_kwargs={"k": 1})
template = """Use the following pieces of context to answer the question at the end.
{context}
Question: {question}
Answer:"""
QA_CHAIN_PROMPT = PromptTemplate(input_variables=["context", "question"], template=template)
qa_chain = load_qa_chain(ChatOpenAI(), chain_type="stuff", prompt=QA_CHAIN_PROMPT)
def complex_query(query):
docs = docsearch.get_relevant_documents(query)
result = qa_chain({"input_documents": docs, "question": query}, return_only_outputs=True)["output_text"]
return result
answer = complex_query("解释一下量子力学的基础原理.")
print(answer) # 展现详细的解答内容[^3]
```
这段脚本首先加载本地文件夹中的所有文本资料作为知识库的一部分;接着采用嵌入向量存储技术建立索引结构以便高效查找相似段落;最后再借助定制化的大规模生成模型给出精确答案。
---
#### 性能优化技巧
为了提高效率减少延迟时间,在设计阶段就应该考虑到以下几个方面:
- **缓存机制**:重复计算的结果可以直接读取而无需再次求解;
- **异步处理**:允许并发访问多个资源从而加快整体进度;
- **简化逻辑流**:去除不必要的中间环节以降低开销成本。[^4]
---
###
阅读全文
相关推荐


















