赞
踩
本文主要讨论Langchain-Chatchat项目中自定义Agent问答的思路和实现。以"计算器工具"为例,简单理解就是通过LLM识别应该使用的工具类型,然后交给相应的工具(也是LLM模型)来解决问题。一个LLM模型可以充当不同的角色,要把结构化的Prompt模板写好,充分利用LLM的Zero/One/Few-Shot能力。
一.自定义Agent问答
1.1+1等于多少
在线模型使用百度qianfan-api的ernie-bot-turbo,问了一个简单的问题"1+1等于多少",自定义Agent问答的思考过程为:Action: 计算器工具;Action Input: 1+1;Observation: 输出结果为2;Thought: 好的,我回答完毕;Final Answer: 1+1等于2。如下所示:
图片
2.函数调用过程
dialogue_mode
为"自定义Agent问答"时,调用
api.agent_chat(prompt, history=history, model=llm_model, temperature=temperature)
方法,如下所示:
图片
根据
agent_chat(self, query: str, history: List[Dict] = [], stream: bool = True, model: str = LLM_MODEL, temperature: float = TEMPERATURE, no_remote_api: bool = None)
中是否为"远程api"走不同的分支。因为本文为有远程api,所有走的
response = self.post("/chat/agent_chat", json=data, stream=True)
这个方法,如下所示:
图片
然后执行
app.post("/chat/agent_chat", tags=["Chat"], summary="与agent对话")(agent_chat)
,如下所示:
图片
最后执行
async def agent_chat()
中的
async def agent_chat_iterator()
方法,如下所示:
图片
拿到model、prompt_template、output_parser后,使用得到链
llm_chain = LLMChain(llm=model, prompt=prompt_template)
,使用
llm_chain、output_parser和tool_names
得到单个action agent,如下所示:
把history转换成agent的memory,然后通过agent、tools和memory得到agent_executor,如下所示:
二.math agent实现原理1.Math Prompt模板 觉得实现原理主要是利用了LLM的few-shot的能力,主要是把结构化的Prompt模板写好。如下所示:
2.LLMMathChain具体使用 主要是根据LLM Model和Prompt模板得到一个LLMMathChain,本质还是LLMMathChain根据Prompt模板执行Python代码进行数学计算,如下所示:
觉得一个落地的AI Agent产品,主要是要有一个给力的LLM来做任务的分解,通过不同工具来解决任务,并且可以利用外部的存储能力,最终有一个LLM来合并生成的方案。以一个软件开发小组为例,组长主要是根据需求拆分任务,分配给前端、后端、数据库和测试等,然后负责生成环境的工程师统一合并代码。看似简单的例子,其实里面涉及的情况可能会非常的复杂,比如组长还可以充当不同的角色,相同的角色有弱有强,强的可以接续拆分任务给弱的角色,可以审查代码等。本质上还是一个复杂逻辑推理路径的问题,可以借鉴思维链、思维树、思维图、累积推理等思想。
参考文献:[1]https://github.com/ai408/Langchain-Chatchat/blob/master/server/agent/math.py
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。