榆林市网站建设_网站建设公司_表单提交_seo优化
2025/12/26 1:46:26 网站建设 项目流程

参考链接

(实现Agent的方法新)LangChain Build a basic agent: https://docs.langchain.com/oss/python/langchain/quickstart#build-a-basic-agent
(实现Agent的方法旧)动手学Ollama教程: https://datawhalechina.github.io/handy-ollama/
Ollama官网:https://ollama.com/

主要内容

如何通过LangChain实现Agent的自主工具选择

学习记录

  • 由于我的LangChain版本是1.2.0,所以教程的代码完全无法使用,很多包的名字都发生了变化;且ReAct Agent方法已经被淘汰,所以选择了LangChain官网的Agent方法进行了学习
  • "hwchase17/react-json"是LangChain Hub上的一个社区共享的Prompt模板,用于构建基于JSON格式的ReAct Agent,但是现在已经不推荐使用ReAct Agent
  • 使用 create_agent 创建的 Agent(如agent.invoke({"messages":[xx:xx, xx:xx]})) 与直接调用 LLM(如 llm.invoke("xxx"))在输入/输出格式上是完全不同的!
    • (from langchain.agents import create_agent)如果agent是create_agent的实例,response是agent.invoke的返回值,那么以qwen3:0.6b或Ollama3.1为例, response["messages"][-1].content 得到的就是AI的输出
    • 如果ChatOllama实例创建的大模型叫llm,那么llm.invoke("hello").content 得到的就是AI的输出
  • 我按照LangChain官网的Build a basic agent的教程(但是把例子中的模型换为了ChatOllama的llama3.1)实际操作时,代码最终输出有错误,经过AI的判断,发现问题源于代码中用到了ToolStrategy,这种模式只能用于能严格遵循工具调用格式+理解虚拟响应工具的模型(如:Claude 3.5+, GPT-4o, Gemini 1.5 Pro等),我尝试改为qwen3:0.6b后,发现代码可以正常得到结构化输出了,即print(response['structured_response']) 不再报错!
  • 本例子中,实现结构化输出的最关键代码是create_agent时的参数response_format=ToolStrategy(ResponseFormat);而实现机构化输出正是模型能自主调用工具、主动获取缺失信息的关键(即对本例而言,结构化输出是实现Agent的关键),原因是:在尝试构造结构化输出的过程中,发现缺少必要数据,会触发工具调用!(response_format本质是专为最终回答设计的虚拟工具调用接口)
  • 我一开始不理解为什么似乎例子只是调用了工具,就称它为Agent了,经过AI的解答,Agent有两个核心特征(仅供参考):1. 自主决策,自己决定是否调用工具;2. 目标导向,为了回答用户问题,主动获取缺失信息。
  • from langgraph.checkpoint.memory import InMemorySaver 可以实现多轮对话,它的重要概念是thread_id,InMemorySaver完全基于thread_id来存储和检索对话状态
  • from dataclasses import dataclass 是 Python 标准库中的一个装饰器,可以简化只用来存数据的类的定义

学习感想

  • 本次学习最大的收获是对Agent的定义有了更深一点的了解,原以为是因为能调用工具所以就可以称为Agent,而实际上必须足够自主,特别是有信息缺失情况下主动尝试获取信息才能成为Agent。
  • 此外本次还了解了LangGraph是LangChain生态的一部分,基于图结构,适合实现复杂的Agent工作流,功能定位更聚焦于复杂控制流和状态管理。例如本例用到的ToolStrategy
  • 原本以为大模型都是打包好的一个黑盒子,而现在发现大模型有时需要LangChain这类的框架来让其充分发挥设计的能力。也意识到稳定的结构化输出对于实现Agent(工具调用的Agent架构)非常重要,这并不是每个大模型都具备的能力。
  • 经过这次学习,感觉到已经不同于以往大模型应用时的从A到B的直线,而是可以多个分支,非常智能去做决策,似乎一下子走向了一个开放性命题。除了Agent,一定还有更多的让大模型更智能的方法,等待我的探索。
  • 第一次经历这么长时间的Datawhale课程学习,庆幸自己坚持了下来,看到了一些大模型背后的东西,感谢Datawhale的开源精神,让我在圣诞夜的电脑前开心度过~

2025.12.26

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询