- Google 搜索对接
- 第三方平台:serpapi.com
- LangChain API 封装:
SerpAPIWrapper
- LangChain Agent 模块使用
- Agent 类型:
SELF_ASK_WITH_SEARCH
- Agent 实例化:
initialize_agent
方法
- Agent 类型:
python.langchain.com/docs/module…
serpapi
可以看到详细的历史调用记录
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("成都举办的大运会是第几届大运会?")
输出
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("谁是苏打绿的主唱?他现在年龄的是多少?")
输出结果
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("那是一个真实的单词吗?")
输出结果
总结
- langchain现成的内置工具可以直接load
- 使用memory记录信息