LangChain-KR项目:使用多种LLM构建工具调用Agent的完整指南

LangChain-KR项目:使用多种LLM构建工具调用Agent的完整指南

引言

在现代AI应用开发中,能够调用外部工具的智能代理(Agent)变得越来越重要。LangChain-KR项目中的15-Agent/04-Agent-More-LLMs模块展示了如何利用多种大型语言模型(LLM)来构建功能强大的工具调用Agent。本文将深入解析这一技术实现,帮助开发者理解其核心概念和实际应用。

环境准备与基础配置

在开始构建Agent之前,我们需要完成一些基础配置工作:

  1. API密钥管理:使用dotenv库从环境变量中安全加载API密钥
  2. 日志追踪设置:配置LangSmith进行执行过程的追踪记录
from dotenv import load_dotenv
load_dotenv()

from langchain_teddynote import logging
logging.langsmith("CH15-Agents")

工具定义与实现

工具(Tool)是Agent能够调用的外部功能模块。在本示例中,我们定义了一个新闻搜索工具:

from langchain.tools import tool
from typing import List, Dict
from langchain_teddynote.tools import GoogleNews

@tool
def search_news(query: str) -> List[Dict[str, str]]:
    """使用关键词搜索Google新闻"""
    news_tool = GoogleNews()
    return news_tool.search_by_keyword(query, k=5)

这个工具接收一个查询字符串,返回包含5条相关新闻的列表。@tool装饰器将其转换为LangChain能够识别的工具格式。

Agent提示工程

有效的提示(Prompt)设计对于Agent性能至关重要。我们构建了一个包含以下要素的提示模板:

  1. 系统消息:定义Agent的角色和能力
  2. 对话历史:支持多轮对话的上下文
  3. 用户输入:接收用户查询
  4. 草稿区:Agent的临时工作空间
from langchain_core.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个乐于助人的助手。确保使用search_news工具搜索关键词相关新闻。"),
    ("placeholder", "{chat_history}"),
    ("human", "{input}"),
    ("placeholder", "{agent_scratchpad}"),
])

支持多种LLM的Agent实现

LangChain-KR项目展示了如何集成多种主流LLM提供商:

1. 初始化不同LLM客户端

from langchain_anthropic import ChatAnthropic
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain_openai import ChatOpenAI
from langchain_ollama import ChatOllama

# OpenAI GPT-4o-mini
gpt = ChatOpenAI(model="gpt-4o-mini")

# Anthropic Claude-3-5-sonnet
claude = ChatAnthropic(model="claude-3-5-sonnet-20240620", temperature=0)

# Google Gemini-1.5-pro
gemini = ChatGoogleGenerativeAI(model="gemini-1.5-pro", temperature=0)

# Together AI的Llama-3.1-70B
llama = ChatOpenAI(
    base_url="https://api.together.xyz/v1",
    api_key=os.environ["TOGETHER_API_KEY"],
    model="meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo",
)

# Ollama的Llama-3.1
ollama = ChatOllama(model="llama3.1", temperature=0)

# Ollama的Qwen2.5 7B(中文优化)
qwen = ChatOllama(model="qwen2.5:latest")

2. 创建Agent执行器

Agent执行器负责管理Agent的生命周期和工具调用流程:

from langchain.agents import create_tool_calling_agent, AgentExecutor

def execute_agent(llm, tools, input_text, label):
    agent = create_tool_calling_agent(llm, tools, prompt)
    executor = AgentExecutor(agent=agent, tools=tools, verbose=False)
    result = executor.invoke({"input": input_text})
    
    print(f"[{label}] 执行结果:")
    if isinstance(result["output"], list):
        for item in result["output"]:
            print(item.get("text", str(item)))
    else:
        print(result["output"])

实际应用示例

我们可以使用不同的LLM来执行相同的任务,比较它们的表现:

query = "搜索AI投资相关新闻,并以Instagram帖子格式呈现结果"

# 使用GPT-4o-mini
execute_agent(gpt, tools, query, "GPT-4o-mini")

# 使用Claude-3-5-sonnet
execute_agent(claude, tools, query, "Claude-3-5-sonnet")

# 使用Gemini-1.5-pro
execute_agent(gemini, tools, query, "Gemini-1.5-pro")

# 使用Llama-3.1-70B(Together AI)
execute_agent(llama, tools, query, "Llama-3.1-70B")

# 使用Llama-3.1(Ollama)
execute_agent(ollama, tools, query, "Llama-3.1(Ollama)")

# 使用Qwen2.5 7B(中文优化)
execute_agent(qwen, tools, query+"请用中文回答", "Qwen2.5(Ollama)")

技术要点解析

  1. 工具调用机制:Agent能够自动识别何时需要调用工具,并正确处理工具返回结果
  2. 多LLM支持:统一的接口支持多种LLM提供商,便于比较和切换
  3. 提示工程:精心设计的提示模板确保Agent行为符合预期
  4. 执行流程:AgentExecutor管理完整的执行周期,包括工具调用、错误处理等

最佳实践建议

  1. 工具设计:确保工具功能单一明确,文档描述准确
  2. 错误处理:为AgentExecutor配置handle_parsing_errors=True以处理解析错误
  3. 性能监控:利用LangSmith追踪Agent执行过程,优化性能
  4. 多语言支持:对于中文场景,Qwen等优化模型可能表现更好

结语

LangChain-KR项目中的这个示例展示了构建多功能Agent的强大能力。通过支持多种LLM和外部工具,开发者可以创建适应不同场景的智能代理。理解这些核心概念后,你可以进一步扩展此框架,集成更多工具和定制功能,打造更强大的AI应用。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

施谨贞Des

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值