位置: IT常识 - 正文

LangChain Agent 执行过程解析 OpenAI

编辑:rootadmin
LangChain Agent 执行过程解析 OpenAI LangChain Agent 执行过程解析什么是LangChain Agent例子工作原理什么是LangChain Agent

推荐整理分享LangChain Agent 执行过程解析 OpenAI,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

简单来说,用户像LangChain输入的内容未知。此时可以有一套工具集合(也可以自定义工具),将这套自定义工具托管给LLM,让其自己决定使用工具中的某一个(如果存在的话)

例子

首先,这里自定义了两个简单的工具

from langchain.tools import BaseTool# 天气查询工具 ,无论查询什么都返回Sunnyclass WeatherTool(BaseTool): name = "Weather" description = "useful for When you want to know about the weather" def _run(self, query: str) -> str: return "Sunny^_^" async def _arun(self, query: str) -> str: """Use the tool asynchronously.""" raise NotImplementedError("BingSearchRun does not support async")# 计算工具,暂且写死返回3class CustomCalculatorTool(BaseTool): name = "Calculator" description = "useful for when you need to answer questions about math." def _run(self, query: str) -> str: return "3" async def _arun(self, query: str) -> str: raise NotImplementedError("BingSearchRun does not support async")

接下来是针对于工具的简单调用:注意,这里使用OpenAI temperature=0需要限定为0

from langchain.agents import initialize_agentfrom langchain.llms import OpenAIfrom CustomTools import WeatherToolfrom CustomTools import CustomCalculatorToolllm = OpenAI(temperature=0)tools = [WeatherTool(), CustomCalculatorTool()]agent = initialize_agent(tools, llm, agent="zero-shot-react-description", verbose=True)agent.run("Query the weather of this week,And How old will I be in ten years? This year I am 28")

看一下完整的响应过程:

I need to use two different tools to answer this questionAction: WeatherAction Input: This weekObservation: Sunny^_^Thought: I need to use a calculator to answer the second part of the questionAction: CalculatorAction Input: 28 + 10Observation: 3Thought: I now know the final answerFinal Answer: This week will be sunny and in ten years I will be 38.

可以看到LangChain Agent 详细分析了每一个步骤,并且正确的调用了每一个可用的方法,拿到了相应的返回值,甚至在最后还修复了28+10=3这个错误。 下面看看LangChain Agent是如何做到这点的

工作原理

首先看看我输入的问题是什么: Query the weather of this week,And How old will I be in ten years? This year I am 28 查询本周天气,以及十年后我多少岁,今年我28

LangChain Agent中,有一套模板可以套用:

PREFIX = """Answer the following questions as best you can. You have access to the following tools:"""FORMAT_INSTRUCTIONS = """Use the following format:Question: the input question you must answerThought: you should always think about what to doAction: the action to take, should be one of [{tool_names}]Action Input: the input to the actionObservation: the result of the action... (this Thought/Action/Action Input/Observation can repeat N times)Thought: I now know the final answerFinal Answer: the final answer to the original input question"""SUFFIX = """Begin!Question: {input}Thought:{agent_scratchpad}"""LangChain Agent 执行过程解析 OpenAI

通过这个模板,加上我们的问题以及自定义的工具,会变成下面这个样子,并且附带解释:

Answer the following questions as best you can. You have access to the following tools: # 尽可能的去回答以下问题,你可以使用以下的工具:Calculator: Useful for when you need to answer questions about math. # 计算器:当你需要回答数学计算的时候可以用到Weather: useful for When you want to know about the weather # 天气:当你想知道天气相关的问题时可以用到Use the following format: # 请使用以下格式(回答)Question: the input question you must answer # 你必须回答输入的问题Thought: you should always think about what to do # 你应该一直保持思考,思考要怎么解决问题Action: the action to take, should be one of [Calculator, Weather] # 你应该采取[计算器,天气]之一Action Input: the input to the action # 动作的输入Observation: the result of the action # 动作的结果... (this Thought/Action/Action Input/Observation can repeat N times) # 思考-行动-输入-输出 的循环可以重复N次Thought: I now know the final answer # 最后,你应该知道最终结果了Final Answer: the final answer to the original input question # 针对于原始问题,输出最终结果Begin! # 开始Question: Query the weather of this week,And How old will I be in ten years? This year I am 28 # 问输入的问题Thought:

通过这个模板向openai规定了一系列的规范,包括目前现有哪些工具集,你需要思考回答什么问题,你需要用到哪些工具,你对工具需要输入什么内容,等等。

如果仅仅是这样,openAI会完全补完你的回答,中间无法插入任何内容。因此LangChain使用OpenAI的stop参数,截断了AI当前对话。"stop": ["\\nObservation: ", "\\n\\tObservation: "]

做了以上设定以后,OpenAI仅仅会给到Action和 Action Input两个内容就被stop早停了。 以下是OpenAI的响应内容:

I need to use the weather tool to answer the first part of the question, and the calculator to answer the second part.Action: WeatherAction Input: This week

到这里是OpenAI的响应结果,可见,很简单就拿到了Action和Action Input。 这里从Tools中找到name=Weather的工具,然后再将This Week传入方法。具体业务处理看详细情况。这里仅返回Sunny。

由于当前找到了Action和Action Input。 代表OpenAI认定当前任务链并没有结束。因此像请求体后拼接结果:Observation: Sunny 并且让他再次思考Thought:

开启第二轮思考: 下面是再次请求的完整请求体:

Answer the following questions as best you can. You have access to the following tools:Calculator: Useful for when you need to answer questions about math.Weather: useful for When you want to know about the weatherUse the following format:Question: the input question you must answerThought: you should always think about what to doAction: the action to take, should be one of [Calculator, Weather]Action Input: the input to the actionObservation: the result of the action... (this Thought/Action/Action Input/Observation can repeat N times)Thought: I now know the final answerFinal Answer: the final answer to the original input questionBegin!Question: Query the weather of this week,And How old will I be in ten years? This year I am 28Thought: I need to use the weather tool to answer the first part of the question, and the calculator to answer the second part.Action: WeatherAction Input: This weekObservation: Sunny^_^Thought:

同第一轮一样,OpenAI再次进行思考,并且返回Action 和 Action Input 后,再次被早停。

I need to calculate my age in ten yearsAction: CalculatorAction Input: 28 + 10

由于计算器工具只会返回3,结果会拼接出一个错误的结果,构造成了一个新的请求体 进行第三轮请求:

Answer the following questions as best you can. You have access to the following tools:Calculator: Useful for when you need to answer questions about math.Weather: useful for When you want to know about the weatherUse the following format:Question: the input question you must answerThought: you should always think about what to doAction: the action to take, should be one of [Calculator, Weather]Action Input: the input to the actionObservation: the result of the action... (this Thought/Action/Action Input/Observation can repeat N times)Thought: I now know the final answerFinal Answer: the final answer to the original input questionBegin!Question: Query the weather of this week,And How old will I be in ten years? This year I am 28Thought: I need to use the weather tool to answer the first part of the question, and the calculator to answer the second part.Action: WeatherAction Input: This weekObservation: Sunny^_^Thought:I need to calculate my age in ten yearsAction: CalculatorAction Input: 28 + 10Observation: 3Thought:

此时两个问题全都拿到了结果,根据开头的限定,OpenAi在完全拿到结果以后会返回I now know the final answer。并且根据完整上下文。把多个结果进行归纳总结:下面是完整的相应结果:

I now know the final answerFinal Answer: I will be 38 in ten years and the weather this week is sunny.

可以看到。ai严格的按照设定返回想要的内容,并且还以外的把28+10=3这个数学错误给改正了

以上,就是LangChain Agent的完整工作流程

本文链接地址:https://www.jiuchutong.com/zhishi/288041.html 转载请保留说明!

上一篇:form表单提交数据如何拿到返回值(form表单提交数组)

下一篇:易北河上的巴斯泰桥,德国撒克逊瑞士国家公园 (© Reinhard Schmid/eStock Photo)(易北河流量)

  • 企业微信能发朋友圈吗(企业微信能发朋友和社群吗吗)

    企业微信能发朋友圈吗(企业微信能发朋友和社群吗吗)

  • 老年机无信号怎么设置(老年机没信号怎么修)

    老年机无信号怎么设置(老年机没信号怎么修)

  • 小米锁屏壁纸自动变怎么弄(小米锁屏壁纸自己换了)

    小米锁屏壁纸自动变怎么弄(小米锁屏壁纸自己换了)

  • ipad6thgeneration是什么型号

    ipad6thgeneration是什么型号

  • 华为nova7怎么设置电量百分比(华为nova7怎么设置锁屏壁纸)

    华为nova7怎么设置电量百分比(华为nova7怎么设置锁屏壁纸)

  • u盘乱码恢复后文件没了(u盘乱码恢复正常文件不见了)

    u盘乱码恢复后文件没了(u盘乱码恢复正常文件不见了)

  • 带负载能力强什么意思(什么叫带负载能力强)

    带负载能力强什么意思(什么叫带负载能力强)

  • 爱奇艺会员不能看奇异果(爱奇艺会员不能跳过广告是什么回事)

    爱奇艺会员不能看奇异果(爱奇艺会员不能跳过广告是什么回事)

  • cdy-an90是华为什么型号(huawei cdy an90)

    cdy-an90是华为什么型号(huawei cdy an90)

  • 为什么华为老有闹钟图标(华为为什么会有广告)

    为什么华为老有闹钟图标(华为为什么会有广告)

  • 一个人可以集几套五福(一个人可以集几个五福卡)

    一个人可以集几套五福(一个人可以集几个五福卡)

  • ios12黑暗模式怎么设置(ios12.4.1怎么设置黑暗模式)

    ios12黑暗模式怎么设置(ios12.4.1怎么设置黑暗模式)

  • 办公室自动化属于(办公室自动化属于计算机几级)

    办公室自动化属于(办公室自动化属于计算机几级)

  • 思科交换机恢复出厂设置(思科交换机恢复密码)

    思科交换机恢复出厂设置(思科交换机恢复密码)

  • 微信辅助验证有风险吗(微信辅助验证有时间限制吗)

    微信辅助验证有风险吗(微信辅助验证有时间限制吗)

  • 美团定后砍五折什么意思(美团订后砍5折是什么意思)

    美团定后砍五折什么意思(美团订后砍5折是什么意思)

  • 淘宝货款几天能到账(淘宝货款一般多少天可以到)

    淘宝货款几天能到账(淘宝货款一般多少天可以到)

  • 问卷星填了是匿名的吗(问卷星调查是匿名的吗)

    问卷星填了是匿名的吗(问卷星调查是匿名的吗)

  • 群文件怎么编辑(群文件怎么编辑手机)

    群文件怎么编辑(群文件怎么编辑手机)

  • 无法连接到网络(无法连接到网络1302是什么意思)

    无法连接到网络(无法连接到网络1302是什么意思)

  • miui10显示充电电流(miui 充电显示)

    miui10显示充电电流(miui 充电显示)

  • 拼多多宝刀可以用几次(拼多多砍价可以买宝刀吗)

    拼多多宝刀可以用几次(拼多多砍价可以买宝刀吗)

  • p30支持红外线遥控吗(p30支持红外线遥控功能吗)

    p30支持红外线遥控吗(p30支持红外线遥控功能吗)

  • python模块的name属性(python模块的扩展名)

    python模块的name属性(python模块的扩展名)

  • 固定资产进项税的账务处理
  • 高新技术企业产品是什么意思
  • 美国个税计算器2021计算器
  • 计提残疾人保障金会计分录
  • 合伙企业分配利润需要全体合伙人同意吗
  • 私募基金超募如何购买
  • 交易性金融资产的交易费用计入哪里
  • 绿化支出如何做会计处理?
  • 预付了订金收到发票怎么做分录?
  • 本月无凭证需要结转吗
  • 购货方销售折让的会计处理
  • 忘了报税算偷税漏税吗
  • 北京建筑施工企业排名
  • 汇算清缴所得税退回做账
  • 企业理财收入交哪些税
  • 外汇收汇怎么做账
  • 利润表中利润归还投资
  • 总公司签订合同发票开具给分公司是否可以抵扣
  • 其他权益性无形资产的进项税额抵扣
  • 王者荣耀如何充值退款
  • 发现以前年度多交增值税怎么申报
  • 税务局怎么核定征收股权转让的
  • win11系统打不出顿号
  • dc.exe是什么程序
  • To install them, you can run: npm install --save core-js/modules/es.array.push.js
  • 转回已核销的坏账
  • 最小的成像传感器
  • 复现开源论文代码总结
  • 小规模纳税人广告费是什么票据类型的
  • php根据日期显示星期几
  • Yii1.1中通过Sql查询进行的分页操作方法
  • pytorch例程
  • css添加边框阴影 立体效果
  • 微信自定义菜单在哪里
  • 房地产开发企业会计制度
  • uni-app入门到实战 以项目为导向
  • 行政事业性收费是什么意思
  • 注册资金到位时间填多少年最好
  • 税控盘使用费
  • db2pd 命令
  • 社保局会给失业人员打电话吗
  • 销售代销货物会计处理
  • 开出银行承兑汇票
  • 预付工程款该怎么记账
  • 库存商品盘盈怎么做账
  • 固定资产的后续计量
  • 期末调汇汇兑损益科目
  • 为什么要提前计划
  • 递延所得税转回税率不一致
  • 住宿费电子发票
  • 残保金怎么办理
  • sqlserver数据库恢复
  • linux 二进制转十六进制
  • win7任务栏功能
  • ghost安装盘的制作
  • linux仿mac
  • xp系统个性化
  • ubuntu系统自带的截图工具
  • ubuntu virtual box
  • win7应用程序没反应
  • windowsxp 32位
  • xp怎么改密码怎么设置
  • win7系统解决数字签名问题
  • 获取windows的最新信息
  • opengl怎么用
  • jquery动态设置css
  • 执行批处理命令
  • node.js读取文件的三种方式
  • js每天的定时任务
  • node.js的安装步骤
  • fiori开发工具
  • python语句分为哪两种
  • jquery给下拉框添加选项
  • js所有知识点
  • 山东省国家税务局总局官网
  • 贤彬考研,刘磊?
  • 北京通州国税局进面分数2022
  • 小规模企业降税
  • 报税卡丢了要怎么处理
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设