当前位置:   article > 正文

开源模型应用落地-LangChain高阶-Tools工具-集成agents(四)

开源模型应用落地-LangChain高阶-Tools工具-集成agents(四)

一、前言

    LangChain 的 tools 是一系列关键组件,它们提供了与外部世界进行交互的能力。通过适当的使用这些组件,可以简单实现如执行网络搜索以获取最新信息、调用特定的 API 来获取数据或执行特定的操作、与数据库进行交互以获取存储的信息等需求。

    本章基于agents进一步串联工具(tools ),从而将大语言模型的能力和本地、云服务能力结合。


二、术语

2.1. agent

    是 LangChain 中的代理模块,它可以使用语言模型(LLM)动态地调用行为链(Chains),根据用户的输入调用不同的行为。代理可以访问单一工具,并根据用户输入确定要使用的工具,也可以使用多个工具,并使用一个工具的输出作为下一个工具的输入。


三、前提条件 

3.1. 基础环境及前置条件

  1.  操作系统:centos7

3.2. 安装虚拟环境

  1. conda create --name langchain python=3.10
  2. conda activate langchain
  3. pip install langchain langchain-openai

3.3. 创建Wolfram账号

开源模型应用落地-LangChain高阶-Tools工具-WolframAlpha(二)

3.4. 创建serper账号

开源模型应用落地-LangChain高阶-Tools工具-GoogleSerperAPIWrapper(三)


四、技术实现

4.1.询问广州白云山位置

  1. # -*- coding = utf-8 -*-
  2. import json
  3. import os
  4. import warnings
  5. import traceback
  6. from langchain.agents import initialize_agent, Tool, AgentType
  7. from langchain_community.utilities.wolfram_alpha import WolframAlphaAPIWrapper
  8. from langchain_openai import ChatOpenAI
  9. from langchain_community.utilities import GoogleSerperAPIWrapper
  10. warnings.filterwarnings("ignore")
  11. os.environ["SERPER_API_KEY"] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  12. os.environ["WOLFRAM_ALPHA_APPID"] = "xxxxxx-xxxxxx"
  13. API_KEY = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  14. os.environ["OPENAI_API_KEY"] = API_KEY
  15. def query_location(region):
  16. # print(f'region: {region}')
  17. search = GoogleSerperAPIWrapper(type="places")
  18. results = search.results(region)
  19. # print(f'results: {results}')
  20. try:
  21. places = results['places']
  22. # places_object = json.loads(places)
  23. if len(places) > 0:
  24. place = places[0]
  25. address = place['address']
  26. latitude = place['latitude']
  27. longitude = place['longitude']
  28. print(f'address: {address}, latitude: {latitude}, longitude: {longitude}')
  29. return address
  30. else:
  31. return 'unknown'
  32. except Exception as e:
  33. traceback.print_exc()
  34. return 'unknown'
  35. def mathematical_calculations(info):
  36. wolfram = WolframAlphaAPIWrapper()
  37. result = wolfram.run(info)
  38. return result
  39. tools = [
  40. Tool(name = "query_location",func=query_location,description="This function is used to query the location of a specified region, with the input parameter being the region"),
  41. Tool(name = "mathematical_calculations",func=mathematical_calculations,description="This function is used for mathematical calculations, and the input parameters are mathematical expressions")
  42. ]
  43. if __name__ == '__main__':
  44. llm = ChatOpenAI(model_name='gpt-3.5-turbo-1106', temperature=0.9, max_tokens=1024)
  45. agent = initialize_agent(tools,llm,agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,max_iterations=3,verbose=True)
  46. result = agent.run('广州白云山在哪里?')
  47. print(f'result: {result}')

调用结果:

4.2.求解数学表达式

  1. # -*- coding = utf-8 -*-
  2. import json
  3. import os
  4. import warnings
  5. import traceback
  6. from langchain.agents import initialize_agent, Tool, AgentType
  7. from langchain_community.utilities.wolfram_alpha import WolframAlphaAPIWrapper
  8. from langchain_openai import ChatOpenAI
  9. from langchain_community.utilities import GoogleSerperAPIWrapper
  10. warnings.filterwarnings("ignore")
  11. os.environ["SERPER_API_KEY"] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  12. os.environ["WOLFRAM_ALPHA_APPID"] = "xxxxxx-xxxxxx"
  13. API_KEY = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  14. os.environ["OPENAI_API_KEY"] = API_KEY
  15. def query_location(region):
  16. # print(f'region: {region}')
  17. search = GoogleSerperAPIWrapper(type="places")
  18. results = search.results(region)
  19. # print(f'results: {results}')
  20. try:
  21. places = results['places']
  22. # places_object = json.loads(places)
  23. if len(places) > 0:
  24. place = places[0]
  25. address = place['address']
  26. latitude = place['latitude']
  27. longitude = place['longitude']
  28. print(f'address: {address}, latitude: {latitude}, longitude: {longitude}')
  29. return address
  30. else:
  31. return 'unknown'
  32. except Exception as e:
  33. traceback.print_exc()
  34. return 'unknown'
  35. def mathematical_calculations(info):
  36. wolfram = WolframAlphaAPIWrapper()
  37. result = wolfram.run(info)
  38. return result
  39. tools = [
  40. Tool(name = "query_location",func=query_location,description="This function is used to query the location of a specified region, with the input parameter being the region"),
  41. Tool(name = "mathematical_calculations",func=mathematical_calculations,description="This function is used for mathematical calculations, and the input parameters are mathematical expressions")
  42. ]
  43. if __name__ == '__main__':
  44. llm = ChatOpenAI(model_name='gpt-3.5-turbo-1106', temperature=0.9, max_tokens=1024)
  45. agent = initialize_agent(tools,llm,agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,max_iterations=3,verbose=True)
  46. result = agent.run('求解:2x + 5 = -3x + 7')
  47. print(f'result: {result}')

调用结果:


五、附带说明

5.1.AgentType取值

  • AgentType.ZERO_SHOT_REACT_DESCRIPTION表示零样本反应式描述代理,它利用 ReAct 框架根据工具的描述来决定使用哪个工具。这种代理可以使用多个工具,但需要为每个工具提供描述信息。工具的选择单纯依靠工具的描述信息。
  • AgentType.SELF_ASK_WITH_SEARCH表示 Self-Ask with Search 代理类型。这种代理使用一个名为“中间应答”的工具,该工具能够查找问题的真实答案。它的工作原理是利用网络搜索 API 进行搜索,并将搜索结果作为中间答案,然后继续进行提问和搜索,直到找到最终的答案。
  • AgentType.REACT_DOCSTORE使用 ReAct 框架与文档存储进行交互。适用于需要从文档存储中获取信息并进行处理的任务。通过使用“Search”和“Lookup”工具,它可以实现对文档的搜索和查找功能,帮助用户快速找到所需的信息。
  • AgentType.CONVERSATIONAL_REACT_DESCRIPTION主要用于对话场景。它使用 ReAct 框架来决定使用哪个工具,并使用内存来记忆先前的对话交互。这种代理类型的设计旨在使代理能够进行对话并提供帮助。通过使用 ReAct 框架,它可以根据对话的上下文和需求选择合适的工具来执行任务,并将工具执行的结果作为上下文反馈给代理,以便其继续进行推理和回答。

5.2.Agent的执行流程

  1. 接收用户输入:接收用户的输入,并将其作为执行的起点。
  2. 规划动作:根据用户输入和当前状态,agent 会规划下一步的动作。这可能包括选择使用哪个工具、确定工具的输入等。
  3. 执行动作:使用所选的工具执行动作,并记录动作的结果。
  4. 处理结果:处理动作的结果,并根据结果决定下一步的动作。
  5. 重复步骤:不断重复上述步骤,直到达到最终的目标或满足特定的条件。

    注意:具体的执行流程可能因 agent 的类型和配置而有所不同。

5.3.注意事项

  1. 工具选择和配置:要确保选择合适的工具,并正确配置它们。
  2. 输入处理:仔细处理用户输入,确保其清晰和准确。
  3. 工具依赖:注意工具之间的依赖关系,避免不必要的冲突。
  4. 性能和效率:关注执行过程中的性能和效率,优化可能的瓶颈。
  5. 错误处理:做好错误处理,应对可能出现的异常情况。
  6. 环境适应性:根据不同的应用场景,调整 Agent 的行为和策略。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/539026
推荐阅读
相关标签
  

闽ICP备14008679号