构建智能代理:用AgentExecutor掌握LangChain的魔力

145 阅读3分钟
# 构建智能代理:用AgentExecutor掌握LangChain的魔力

## 引言

在当今的信息时代,使用智能代理来自动化复杂任务已成为一种趋势。LangChain 提供了强大的工具来帮助开发者构建这样的智能代理。在本文中,我们将探讨如何使用 LangChain 的 AgentExecutor 以及相关工具来创建一个能够与多种工具互动的智能代理。

## 主要内容

### 使用语言模型

语言模型是智能代理的核心。在 LangChain 中,我们可以使用多种语言模型,包括但不限于 OpenAI、Anthropic 和 Google Vertex AI。这些模型可以作为推理引擎,帮助代理决定需要采取的行动及其输入。

### 创建检索器

为了让代理访问特定的信息,我们需要创建一个检索器。我们将使用 LangChain 的 `WebBaseLoader``FAISS` 来创建一个本地索引的检索器。

```python
from langchain_community.document_loaders import WebBaseLoader
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter

loader = WebBaseLoader("https://docs.smith.langchain.com/overview")
docs = loader.load()
documents = RecursiveCharacterTextSplitter(
    chunk_size=1000, chunk_overlap=200
).split_documents(docs)
vector = FAISS.from_documents(documents, OpenAIEmbeddings())
retriever = vector.as_retriever()

使用搜索工具

我们还可以将搜索引擎作为工具整合到代理中,比如使用 Tavily 搜索引擎。注意,由于某些地区的网络限制,开发者可能需要考虑使用 API 代理服务。

from langchain_community.tools.tavily_search import TavilySearchResults

search = TavilySearchResults(max_results=2)
search.invoke("what is the weather in SF")  # 使用API代理服务提高访问稳定性

增加聊天历史

为了使智能代理能够“记住”先前的互动,可将聊天历史集成到代理中。这可以通过传递先前的chat_history实现。

from langchain_core.messages import AIMessage, HumanMessage

response = agent_executor.invoke(
    {
        "chat_history": [
            HumanMessage(content="hi! my name is bob"),
            AIMessage(content="Hello Bob! How can I assist you today?"),
        ],
        "input": "what's my name?",
    }
)

调试与跟踪

在开发复杂应用时,追踪应用内的每一步都是至关重要的。LangSmith 提供了强大的调试工具来帮助开发者实现这一点。

代码示例

以下是一个完整的智能代理示例,展示如何将不同的组件组合在一起:

from langchain import hub
from langchain.agents import create_tool_calling_agent
from langchain.agents import AgentExecutor

# 获取并设置 prompt
prompt = hub.pull("hwchase17/openai-functions-agent")
model = ChatOpenAI(model="gpt-4")
tools = [search, retriever_tool]

# 创建 agent
agent = create_tool_calling_agent(model, tools, prompt)

# 创建 agent executor
agent_executor = AgentExecutor(agent=agent, tools=tools)

# 运行示例
response = agent_executor.invoke({"input": "what's the weather in SF?"})
print(response)

常见问题和解决方案

  • API 连接问题:使用 Tavily 搜索时,可能会遇到 API 连接问题。建议在需要时使用代理服务。
  • 模型响应不准确:确保正确地配置和调用模型,并检查工具调用是否按预期工作。

总结和进一步学习资源

通过本文,我们展示了如何使用 LangChain 构建一个简单的智能代理。为了深入学习,您可以参考以下资源:

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---