首页 > 科技周边 > 人工智能 > 在Langchain中设置自定义工具和代理

在Langchain中设置自定义工具和代理

William Shakespeare
发布: 2025-03-20 10:19:12
原创
923 人浏览过

该教程展示了使用Langchain建立多功能对话AI代理,该代理是将大型语言模型(LLM)与外部工具和API集成的强大框架。该代理可以执行各种任务,从生成随机数,提供哲学沉思到从网页中动态检索和处理信息。预先构建和自定义工具的组合可以实时,上下文感知和内容丰富的响应。

关键学习成果

  • Langchain大师与LLM和外部资源的集成。
  • 为您的会话代理中的专门功能开发并实施自定义工具。
  • 有效获取和处理实时Web数据以进行准确的响应。
  • 建立一个会话代理,该对话代理保留连贯相互作用的上下文。

*本文是***数据科学博客马拉松的一部分。

目录

  • 为什么将Langchain,Openai和Duckduckgo结合在一起?
  • 安装必要的软件包
  • 配置API访问
  • 将兰链连接到Openai模型
  • 集成网络搜索工具
  • 创建自定义功能
  • 使用自定义工具构建对话代理
  • 利用Tool类进行网络刮擦
  • 结论
  • 常见问题

为什么将Langchain,Openai和Duckduckgo结合在一起?

Langchain,Openai和Duckduckgo的协同作用允许进行精致的对话AI。 Openai的LLM提供了自然语言处理,而DuckDuckgo则提供以隐私为中心的搜索API。这种组合使AI能够生成上下文相关的响应并检索实时数据,从而增强其适应性和准确性。这个功能强大的工具包非常适合创建能够处理各种用户查询的智能聊天机器人或虚拟助理。

安装必要的软件包

首先使用PIP安装所需的Python软件包:

 <code>!pip -q install langchain==0.3.4 openai pip install langchain !pip -q install duckduckgo-search</code>
登录后复制

验证Langchain的安装:

 <code>!pip show langchain</code>
登录后复制

在Langchain中设置自定义工具和代理

配置API访问

获取您的OpenAI API密钥并将其设置为环境变量:

 <code>import os os.environ["OPENAI_API_KEY"] = "your_openai_key_here"</code>
登录后复制

用实际键替换"your_openai_key_here" 。这对于与GPT-3.5-Turbo模型相互作用至关重要。

将兰链连接到Openai模型

使用Langchain建立与OpenAI模型的连接:

 <code>from langchain import OpenAI from langchain.chat_models import ChatOpenAI from langchain.chains.conversation.memory import ConversationBufferWindowMemory # Configure the GPT-4o LLM turbo_llm = ChatOpenAI( temperature=0, model_name='gpt-4o' )</code>
登录后复制

低温(温度= 0)可确保一致的响应。

集成网络搜索工具

通过添加DuckDuckgo搜索工具来增强代理的功能:

 <code>from langchain.tools import DuckDuckGoSearchTool from langchain.agents import Tool from langchain.tools import BaseTool search = DuckDuckGoSearchTool() # Define the tool tools = [ Tool( name = "search", func=search.run, description="Best for questions about current events. Use precise queries." ) ]</code>
登录后复制

该工具被描述为当前事件的理想选择,被添加到代理商的工具包中。

创建自定义功能

使用自定义工具扩展代理的功能:

自定义工具:生活的意义

此功能对生活意义问题提供了有趣的回应:

 <code>def meaning_of_life(input=""): return 'The meaning of life is 42 (approximately!)' life_tool = Tool( name='Meaning of Life', func= meaning_of_life, description="Use for questions about the meaning of life. Input: 'MOL'" )</code>
登录后复制

自定义工具:随机号码生成器

该工具在0到5之间生成随机整数:

 <code>import random def random_num(input=""): return random.randint(0,5) random_tool = Tool( name='Random number', func= random_num, description="Use to get a random number. Input: 'random'" )</code>
登录后复制

使用自定义工具构建对话代理

使用自定义工具创建对话代理可以进行高度量身定制的交互。

代理初始化

导入initialize_agent并定义工具:

 <code>from langchain.agents import initialize_agent tools = [search, random_tool, life_tool]</code>
登录后复制

代理记忆

使用ConversationBufferWindowMemory实现内存:

 <code>from langchain.chains.conversation.memory import ConversationBufferWindowMemory memory = ConversationBufferWindowMemory( memory_key='chat_history', k=3, return_messages=True )</code>
登录后复制

这使经纪人可以回忆起最近的对话转弯(最多3)。

代理结构

初始化代理:

 <code>conversational_agent = initialize_agent( agent='chat-conversational-react-description', tools=tools, llm=turbo_llm, verbose=True, max_iterations=3, early_stopping_method='generate', memory=memory )</code>
登录后复制

参数指定代理类型,工具,LLM,冗长,迭代限制,早期停止和内存。

代理测试

与代理互动:

 <code>conversational_agent("What time is it in London?") conversational_agent("Can you give me a random number?") conversational_agent("What is the meaning of life?")</code>
登录后复制

在Langchain中设置自定义工具和代理在Langchain中设置自定义工具和代理在Langchain中设置自定义工具和代理

自定义系统提示

通过调整系统提示来完善代理的行为:

 <code># system prompt conversational_agent.agent.llm_chain.prompt.messages[0].prompt.template</code>
登录后复制

在Langchain中设置自定义工具和代理

 <code>fixed_prompt = '''Assistant is a large language model... [modified prompt instructing the agent to use tools appropriately]'''</code>
登录后复制

应用修改的提示:

 <code>conversational_agent.agent.llm_chain.prompt.messages[0].prompt.template = fixed_prompt</code>
登录后复制

重新测试代理。

在Langchain中设置自定义工具和代理在Langchain中设置自定义工具和代理

利用Tool类进行网络刮擦

创建一个自定义工具以从网页中提取纯文本:

 <code>from bs4 import BeautifulSoup import requests from langchain.agents import Tool def stripped_webpage(webpage): # ... (function to fetch and clean webpage text) ... web_scraper_tool = Tool( name='Web Scraper', func=stripped_webpage, description="Fetches and cleans webpage text (limited to 4000 characters)." )</code>
登录后复制

将此工具集成到您的代理中。

创建WebPageTool

一个更强大的解决方案涉及创建自定义WebPageTool类:

来自langchain.tools进口基座
来自BS4进口美丽的小组
导入请求

类WebPagetool(basetool):
    #...(类似于原始响应中的类定义)...
登录后复制

使用新工具和更新的系统提示重新初始化代理。测试示例:

 convertinational_agent.run(“ https://techcrunch.com/?今天是否有有关会所的文章”)
convertitation_agent.run(“ www.cbsnews.com/上的顶级故事是什么?”) 
登录后复制

在Langchain中设置自定义工具和代理在Langchain中设置自定义工具和代理在Langchain中设置自定义工具和代理

结论

该教程展示了使用Langchain建立高度适应性的对话剂。模块化设计可轻松扩展和自定义。该代理展示了将AI与实时数据访问相结合的功能。

关键要点

  • Langchain实现模块化代理结构。
  • Web刮擦和搜索工具提供了最新信息。
  • 自定义工具根据特定需求量身定制代理。
  • 内存功能保持对话环境。

常见问题

(与原始响应相同的常见问题解答,改写以获得更好的流动和简洁性。)

以上是在Langchain中设置自定义工具和代理的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板