LangChain 核心模块 Agent 代码示例

77 阅读2分钟
  • Google 搜索对接
    • 第三方平台:serpapi.com
    • LangChain API 封装:SerpAPIWrapper
  • LangChain Agent 模块使用
    • Agent 类型:SELF_ASK_WITH_SEARCH
    • Agent 实例化:initialize_agent 方法

python.langchain.com/docs/module…

serpapi

serpapi.com/searches

可以看到详细的历史调用记录 image.png

SELF_ASK_WITH_SEARCH 示例

import os
from langchain.llms import OpenAI
from langchain.utilities import SerpAPIWrapper
from langchain.agents import initialize_agent, AgentType, Tool

api_key = 'sk-xxx'
os.environ["OPENAI_API_KEY"] = api_key

serp_api = 'xxx'
os.environ["SERPAPI_API_KEY"] = serp_api

llm = OpenAI(temperature=0)

# 实例化查询工具
search = SerpAPIWrapper()
# 定义工具集 类似function call的写法
tools = [
    Tool(
        name="Intermediate Answer",
        func=search.run,
        description="useful for when you need to ask with search",
    )
]

# 实际运行 Agent,查询问题(正确)
ask_agent = initialize_agent(tools, llm, agent=AgentType.SELF_ASK_WITH_SEARCH, verbose=True)
ask_agent.run("成都举办的大运会是第几届大运会?")

输出

image.png

ReAct 示例

ReAct 核心思想是 推理+操作,本示例以 Google Search 和 LLM Math 作为可选操作集合(toolkits),实现 ReAct 功能。

以下SERPAPI_API_KEY仅为示例,请访问 serpapi.com 注册账号并替换为自己的 API_KEY(每月100次免费调用)

# 设置OpenAI和SERPAPI的API密钥
import os

from langchain_openai import OpenAI
from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.agents import AgentType

api_key = 'sk-xxx'
os.environ["OPENAI_API_KEY"] = api_key

serp_api = 'xxx'
os.environ["SERPAPI_API_KEY"] = serp_api

llm = OpenAI(temperature=0)

# 加载 LangChain 内置的 Tools
tools = load_tools(["serpapi", "llm-math"], llm=llm)

agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)

agent.run("谁是苏打绿的主唱?他现在年龄的是多少?")

输出结果 image.png

OpenAI Function示例

支持memory 历史上下文记录功能

# 设置OpenAI和SERPAPI的API密钥
import os
from langchain.agents import tool
from langchain.schema import SystemMessage
from langchain.agents import OpenAIFunctionsAgent
from langchain_openai import ChatOpenAI
from langchain.agents import AgentExecutor
from langchain.memory import ConversationBufferMemory

api_key = 'sk-xx'
os.environ["OPENAI_API_KEY"] = api_key

serp_api = 'xx'
os.environ["SERPAPI_API_KEY"] = serp_api

# 使用 GPT-3.5-turbo
llm = ChatOpenAI(temperature=0)


@tool
def get_word_length(word: str) -> int:
    """Returns the length of a word."""
    return len(word) * 10


memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)

tools = [get_word_length]

system_message = SystemMessage(content="你是非常强大的AI助手,但在计算单词长度方面不擅长。")
prompt = OpenAIFunctionsAgent.create_prompt(system_message=system_message)

agent = OpenAIFunctionsAgent(llm=llm, tools=tools, prompt=prompt)

# 实例化 OpenAIFunctionsAgent
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True, memory=memory)

agent_executor.run("单词“educa” 中有多少个字母?")
agent_executor.run("那是一个真实的单词吗?")

输出结果 image.png

总结

  • langchain现成的内置工具可以直接load
  • 使用memory记录信息