Skip to content

6. 基于 LangChain 快速创建 Agent

6.1 代码

LangChain 是一个用于构建基于语言模型的应用程序的框架,它提供了丰富的工具和组件,使得创建 Agent 变得更加简单。

6.1.1 基本示例

python
from langchain.agents import initialize_agent, Tool
from langchain.llms import OpenAI

# 定义工具
def search(query):
    """搜索信息"""
    return f"搜索结果: {query}的相关信息"

def calculator(expression):
    """计算数学表达式"""
    try:
        return f"计算结果: {eval(expression)}"
    except:
        return "计算错误"

# 初始化工具
tools = [
    Tool(
        name="Search",
        func=search,
        description="用于搜索信息"
    ),
    Tool(
        name="Calculator",
        func=calculator,
        description="用于计算数学表达式"
    )
]

# 初始化Agent
llm = OpenAI(temperature=0)
agent = initialize_agent(
tools,
llm,
agent="zero-shot-react-description",
verbose=True
)

# 使用Agent
result = agent.run("今天天气怎么样?25加36等于多少?")
print(result)

6.1.2 高级示例:使用 RAG

python
from langchain.agents import initialize_agent, Tool
from langchain.llms import OpenAI
from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings
from langchain.chains import RetrievalQA

# 定义搜索工具
def search(query):
    """搜索信息"""
    return f"搜索结果: {query}的相关信息"

# 定义计算工具
def calculator(expression):
    """计算数学表达式"""
    try:
        return f"计算结果: {eval(expression)}"
    except:
        return "计算错误"

# 创建向量存储和检索器
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_texts(
    ["北京是中国的首都", "上海是中国的经济中心", "广州是中国的南大门"],
    embeddings
)
retriever = vectorstore.as_retriever()

# 创建 RAG 链
qa_chain = RetrievalQA.from_chain_type(
    llm=OpenAI(),
    chain_type="stuff",
    retriever=retriever
)

# 定义 RAG 工具
def rag_tool(query):
    """从知识库中检索信息"""
    return qa_chain.run(query)

# 初始化工具
tools = [
    Tool(
        name="Search",
        func=search,
        description="用于搜索信息"
    ),
    Tool(
        name="Calculator",
        func=calculator,
        description="用于计算数学表达式"
    ),
    Tool(
        name="KnowledgeBase",
        func=rag_tool,
        description="用于从知识库中检索信息"
    )
]

# 初始化Agent
llm = OpenAI(temperature=0)
agent = initialize_agent(
tools,
llm,
agent="zero-shot-react-description",
verbose=True
)

# 使用Agent
result = agent.run("中国的首都是哪里?北京今天天气怎么样?25加36等于多少?")
print(result)

6.2 运行效果

6.2.1 基本示例运行效果

输入:"今天天气怎么样?25加36等于多少?"

Agent 思考过程

我需要回答两个问题:今天天气怎么样,以及25加36等于多少。

对于第一个问题,我需要使用Search工具来获取今天的天气信息。
对于第二个问题,我需要使用Calculator工具来计算25加36的结果。

首先,我将使用Search工具查询今天的天气。

执行步骤

  1. 调用 Search 工具搜索"今天天气"
  2. 调用 Calculator 工具计算"25+36"

输出

今天天气晴朗,温度适宜。25加36等于61。

6.2.2 高级示例运行效果

输入:"中国的首都是哪里?北京今天天气怎么样?25加36等于多少?"

Agent 思考过程

我需要回答三个问题:中国的首都是哪里,北京今天天气怎么样,以及25加36等于多少。

对于第一个问题,我可以使用KnowledgeBase工具从知识库中检索信息。
对于第二个问题,我需要使用Search工具来获取北京今天的天气信息。
对于第三个问题,我需要使用Calculator工具来计算25加36的结果。

首先,我将使用KnowledgeBase工具查询中国的首都。

执行步骤

  1. 调用 KnowledgeBase 工具查询"中国的首都是哪里"
  2. 调用 Search 工具搜索"北京今天天气"
  3. 调用 Calculator 工具计算"25+36"

输出

中国的首都是北京。北京今天天气晴朗,温度适宜。25加36等于61。

6.3 使用 Google Vertex AI Agent 创建生产应用

Google Vertex AI Agent 是 Google Cloud 提供的企业级 Agent 服务,适合构建生产级应用。

6.3.1 优势

  • 企业级安全和合规:符合各种行业标准和法规
  • 与 Google 云服务集成:无缝集成 Google Cloud 的各种服务
  • 可扩展性强:支持大规模部署
  • 支持多模态输入:处理文本、图像、语音等多种输入
  • 管理和监控:提供全面的管理和监控工具

6.3.2 使用示例

python
from google.cloud import aiplatform

# 初始化 Vertex AI
aiplatform.init(project="your-project-id", location="us-central1")

# 创建 Agent
agent = aiplatform.Agent.create(
    display_name="my-agent",
    description="A demonstration agent",
    tools=[
        {
            "function": {
                "name": "search",
                "description": "Search for information",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "query": {
                            "type": "string",
                            "description": "The search query"
                        }
                    },
                    "required": ["query"]
                }
            }
        }
    ]
)

# 使用 Agent
response = agent.predict(
    instances=[
        {
            "content": "What's the weather today?",
            "role": "user"
        }
    ]
)

print(response)

6.3.3 部署和管理

  • 版本管理:支持多个版本的 Agent
  • A/B 测试:可以进行 A/B 测试来优化 Agent
  • 监控和日志:提供详细的监控和日志
  • 自动扩展:根据负载自动扩展

6.4 LangChain 的优势

6.4.1 模块化设计

  • 组件化:提供各种可组合的组件
  • 可扩展性:易于添加新功能和工具
  • 灵活性:适应不同的使用场景

6.4.2 丰富的工具集成

  • 内置工具:提供多种内置工具
  • 自定义工具:支持自定义工具
  • 第三方集成:与各种第三方服务集成

6.4.3 强大的链式操作

  • 链式调用:支持复杂的链式操作
  • 条件分支:支持条件分支逻辑
  • 循环操作:支持循环操作

6.4.4 多模型支持

  • OpenAI:支持 OpenAI 的各种模型
  • Hugging Face:支持 Hugging Face 的模型
  • Google:支持 Google 的模型
  • 其他:支持其他各种模型

6.5 最佳实践

6.5.1 工具设计

  • 清晰的描述:工具描述应该清晰、准确
  • 明确的参数:参数定义应该明确
  • 标准化的返回:返回格式应该标准化
  • 错误处理:应该处理可能的错误情况

6.5.2 Agent 配置

  • 选择合适的 Agent 类型:根据任务选择合适的 Agent 类型
  • 调整温度参数:根据任务调整温度参数
  • 设置合适的最大迭代次数:避免无限循环
  • 配置记忆:根据需要配置记忆系统

6.5.3 性能优化

  • 批处理:批量处理请求
  • 缓存:缓存频繁使用的结果
  • 并行处理:并行处理多个任务
  • 资源管理:合理管理计算资源

6.6 小结

  • LangChain 提供了丰富的工具和组件,使得创建 Agent 变得更加简单
  • 基本示例展示了如何创建一个简单的 Agent
  • 高级示例展示了如何集成 RAG 功能
  • Google Vertex AI Agent 适合构建生产级应用
  • LangChain 的优势包括模块化设计、丰富的工具集成、强大的链式操作和多模型支持
  • 最佳实践包括工具设计、Agent 配置和性能优化

现在你已经了解了如何基于 LangChain 快速创建 Agent,接下来让我们探讨实践项目和应用场景。