当前位置: 首页 > wzjs >正文

wordpress 443端口刷关键词优化排名

wordpress 443端口,刷关键词优化排名,worldpress英文网站建设,天津差旅管家商旅服务有限公司引言 小黑黑通过探索langchain源码,设计了一个关于agent使用工具的一个简化版小demo(代码可以跑通),主要流程: 1.问题输入给大模型。 2.大模型进行思考,输出需要执行的action和相关思考信息。 3.通过代理&…

引言

小黑黑通过探索langchain源码,设计了一个关于agent使用工具的一个简化版小demo(代码可以跑通),主要流程:
1.问题输入给大模型。
2.大模型进行思考,输出需要执行的action和相关思考信息。
3.通过代理(demo中为perform_action函数)执行action进行工具调用,并返回工具调用结果(res)。
4.将action和res进行记录,继续喂给大模型进行思考,让大模型输出下一步action,以此类推…

demo准备工作

导包

from langchain_core.tools import BaseTool
from typing import Sequence, Optional, List
from langchain_core.prompts import BasePromptTemplate
import re
from langchain_core.tools import tool
from langchain_core.prompts.chat import (ChatPromptTemplate,HumanMessagePromptTemplate,SystemMessagePromptTemplate,
)
from langchain.agents import StructuredChatAgent
from langchain.chains.llm import LLMChain
from langchain_openai import ChatOpenAI
# 导入智能体
from langchain.agents.agent import Agent
from langchain.agents.structured_chat.output_parser import StructuredChatOutputParserWithRetries
from pydantic import Field
from langchain.agents.agent import Agent, AgentOutputParser
from typing import Any, List, Optional, Sequence, Tuple, Union
from langchain_core.agents import AgentAction
from langchain_core.language_models import BaseLanguageModel
from langchain_core.callbacks import BaseCallbackManager
from langchain_core.agents import AgentAction, AgentFinish, AgentStep
from langchain.agents.tools import InvalidTool

定义prompt模板(提示大模型思考和调用工具)

前缀部分(任务说明)

PREFIX = 'Respond to the human as helpfully and accurately as possible. You have access to the following tools:'

后缀部分(输出格式定义)

SUFFIX = 'Begin! Reminder to ALWAYS respond with a valid json blob of a single action. Use tools if necessary. Respond directly if appropriate. Format is Action:```$JSON_BLOB```then Observation:.\nThought:'

输入提示

HUMAN_MESSAGE_TEMPLATE = '''{input}{agent_scratchpad}'''

引导部分

FORMAT_INSTRUCTIONS = '''Use a json blob to specify a tool by providing an action key (tool name) and an action_input key (tool input).Valid "action" values: "Final Answer" or {tool_names}Provide only ONE action per $JSON_BLOB, as shown:

{{{{
“action”: $TOOL_NAME,
“action_input”: $INPUT
}}}}


Follow this format:Question: input question to answer
Thought: consider previous and subsequent steps
Action:

$JSON_BLOB

Observation: action result
... (repeat Thought/Action/Observation N times)
Thought: I know what to respond
Action:

{{{{
“action”: “Final Answer”,
“action_input”: “Final response to human”
}}}}

大模型定义(key脱敏处理,可以免费申请)

zhipu_key = '111111111111111111111111111111111111111111111'
llm = ChatOpenAI(temperature=0.01,model="glm-4-flash",openai_api_key=zhipu_key,openai_api_base="https://open.bigmodel.cn/api/paas/v4/"
)

组合prompt

def create_prompt(tools: Sequence[BaseTool],prefix: str = PREFIX,suffix: str = SUFFIX,human_message_template: str = HUMAN_MESSAGE_TEMPLATE,format_instructions: str = FORMAT_INSTRUCTIONS,input_variables: Optional[List[str]] = None,memory_prompts: Optional[List[BasePromptTemplate]] = None,
) -> BasePromptTemplate:tool_strings = []for tool in tools:args_schema = re.sub("}", "}}", re.sub("{", "{{", str(tool.args)))tool_strings.append(f"{tool.name}: {tool.description}, args: {args_schema}")formatted_tools = "\n".join(tool_strings)tool_names = ", ".join([tool.name for tool in tools])format_instructions = format_instructions.format(tool_names=tool_names)template = "\n\n".join([prefix, formatted_tools, format_instructions, suffix])if input_variables is None:input_variables = ["input", "agent_scratchpad"]_memory_prompts = memory_prompts or []messages = [SystemMessagePromptTemplate.from_template(template),*_memory_prompts,HumanMessagePromptTemplate.from_template(human_message_template),]return ChatPromptTemplate(input_variables=input_variables, messages=messages)  # type: ignore[arg-type]

工具函数定义

@tool
def multiply(first_int: int, second_int: int) -> int:"""将两个整数相乘。"""print('---------multiply-----------------')return first_int * second_int@tool
def add(first_int: int, second_int: int) -> int:"将两个整数相加。"print('---------add-----------------')return first_int + second_int@tool
def exponentiate(base: int, exponent: int) -> int:"指数运算"print('---------exponentiate-----------------')with open('小黑黑.txt', 'w', encoding='utf-8') as f:f.write('小黑黑')return base**exponenttools = [multiply, add, exponentiate]
prompt = create_prompt(tools=tools)

定义chain和智能体

# 定义chain
llm_chain = LLMChain(llm=llm,prompt=prompt,callback_manager=None,
)
# 定义智能体
structuredChatAgent = StructuredChatAgent(llm_chain=llm_chain,allowed_tools=[tool.name for tool in tools],output_parser=StructuredChatOutputParserWithRetries())

demo核心代码

代理函数

# 执行智能体
def perform_action(agent, name_to_tool_map, agent_action, run_manager=None):# 如果选择的工具在工具箱里if agent_action.tool in name_to_tool_map:# 获取所有工具tool = name_to_tool_map[agent_action.tool]# 判断是否直接返回工具return_direct = tool.return_direct# 获取智能体的输出前缀,例如思考内容用“Thought”,观察内容用“Observation:”,{'llm_prefix': 'Thought:', 'observation_prefix': 'Observation: '}tool_run_kwargs = agent.tool_run_logging_kwargs()# 执行工具observation = tool.run(agent_action.tool_input,verbose=None,color=None,callbacks=run_manager.get_child() if run_manager else None,**tool_run_kwargs,)# 选择的工具不在工具箱内,返回“无效工具相关信息给大模型”else:tool_run_kwargs = agent.tool_run_logging_kwargs()observation = InvalidTool().run({"requested_tool_name": agent_action.tool,"available_tool_names": list(name_to_tool_map.keys()),},verbose=self.verbose,color=None,callbacks=run_manager.get_child() if run_manager else None,**tool_run_kwargs,)# 以AgentStep的形式返回return AgentStep(action=agent_action, observation=observation)

大模型通过思考,一步步调用工具

# 历史动作和工具调用结果
intermediate_steps=[]
# 输入问题
question = '调用api计算3加5乘2等于多少?'
# 如果action为AgentFinish,则为最后一步,跳出循环
action = None
# 如果action为AgentFinish,则为最后一步,跳出循环
while True:# 大语言模型通过思考给出actionaction = structuredChatAgent.plan(intermediate_steps=intermediate_steps, input=question)print('[[[action]]]:', action)# 跳出循环if isinstance(action, AgentFinish):print('执行结束,得到答案')break# 通过 代理 执行actionagent_step = perform_action(structuredChatAgent, dict((tool.name,tool) for tool in tools), action)print('[[[agent_step]]]:', agent_step)# 将action和执行结果保存intermediate_steps.append((agent_step.action, agent_step.observation))print('*****************************************************************************************')

程序运行结果:
[[[action]]]: tool=‘multiply’ tool_input={‘first_int’: 5, ‘second_int’: 2} log=‘Thought: The user wants to calculate 3 + 5 * 2. According to the order of operations, multiplication should be performed before addition. So, I will first multiply 5 by 2 and then add 3 to the result.\nAction:\njson\n{\n "action": "multiply",\n "action_input": {\n "first_int": 5,\n "second_int": 2\n }\n}\n
---------multiply-----------------
[[[agent_step]]]: action=AgentAction(tool=‘multiply’, tool_input={‘first_int’: 5, ‘second_int’: 2}, log=‘Thought: The user wants to calculate 3 + 5 * 2. According to the order of operations, multiplication should be performed before addition. So, I will first multiply 5 by 2 and then add 3 to the result.\nAction:\njson\n{\n "action": "multiply",\n "action_input": {\n "first_int": 5,\n "second_int": 2\n }\n}\n’) observation=10


[[[action]]]: tool=‘add’ tool_input={‘first_int’: 3, ‘second_int’: 10} log=‘Action:\njson\n{\n "action": "add",\n "action_input": {\n "first_int": 3,\n "second_int": 10\n }\n}\n
---------add-----------------
[[[agent_step]]]: action=AgentAction(tool=‘add’, tool_input={‘first_int’: 3, ‘second_int’: 10}, log=‘Action:\njson\n{\n "action": "add",\n "action_input": {\n "first_int": 3,\n "second_int": 10\n }\n}\n’) observation=13


[[[action]]]: return_values={‘output’: ‘13’} log=‘Action:\njson\n{\n "action": "Final Answer",\n "action_input": "13"\n}\n
执行结束,得到答案

小黑黑下一步探索方向:

通过上述的action信息,自己手搓一个prompt,得以熟悉提示工程。

加油小黑黑,一步步手搓,享受其中!!与AI对话

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


文章转载自:

http://RVuGaOXF.gxqpm.cn
http://a5ugIqEE.gxqpm.cn
http://7FUSAt9r.gxqpm.cn
http://Ze6E8jVl.gxqpm.cn
http://tw2LyGeq.gxqpm.cn
http://bpC0nnYX.gxqpm.cn
http://AGFfuPxS.gxqpm.cn
http://2cGQ220G.gxqpm.cn
http://SuYAKRQM.gxqpm.cn
http://NBdyUdCH.gxqpm.cn
http://0omKie0k.gxqpm.cn
http://Bm1CpkJy.gxqpm.cn
http://g8hy0TPt.gxqpm.cn
http://WMNLzKMP.gxqpm.cn
http://hOlE5xEs.gxqpm.cn
http://M7z7xLUV.gxqpm.cn
http://bb21SA1i.gxqpm.cn
http://EpFwzcXV.gxqpm.cn
http://IVVg02dL.gxqpm.cn
http://Bh8K2Nq8.gxqpm.cn
http://mZj7Cu5L.gxqpm.cn
http://M5m6Crg5.gxqpm.cn
http://Msq6DFUQ.gxqpm.cn
http://iq0xlIE4.gxqpm.cn
http://axW4XCNH.gxqpm.cn
http://BduOkqRD.gxqpm.cn
http://gNhtwblg.gxqpm.cn
http://Pvoy1BKt.gxqpm.cn
http://WSsfBouj.gxqpm.cn
http://ktKCAKJe.gxqpm.cn
http://www.dtcms.com/wzjs/661457.html

相关文章:

  • 房地产集团网站建设方案北京金企鹅网站建设方案
  • 河北住建局与建设厅网站网站功能是什么
  • 网站建设规模用什么形容构建网站的安全
  • 梧州网站开发网站建设 起飞
  • 建立网站的目标网页制作与网站建设思维导图
  • 厦门哪里有做网站铁哥们网站建设
  • 一个ip可以做几个网站物联网设备
  • 哪些企业需要做网站建设wordpress导航图标代码
  • 用dw做的网站怎么上线广州 营销型网站
  • 重庆建设工程施工安全管理平台一键优化免费下载
  • 响应式 网站建设布料市场做哪个网站好
  • 涿州做网站建设wordpress博客代码高亮
  • 霸州建设局网站电子商务网站建设的核心多选
  • 网站正在建设中phpapache 配置网站地址
  • 信融营销型网站建设徐州铜山区三盛开发公司
  • 无锡网页建站主机网站建设
  • 网站开发相关行业网站做的好的
  • 百度如何收录网站怎么在网站挂黑链接
  • wordpress导航类网站无极领域0基础12天精通网站建设
  • 收费的网站怎么做的网站模板炫酷
  • 浏览器怎么做能不拦截网站以前做视频的网站吗
  • 公司域名查询网站网站开发运营工作总结
  • 一站式采购平台官网游戏官网平台
  • 手机网站打开很慢网站主题及风格
  • 千牛网站上的店铺推广怎么做汉中做网站的电话
  • 网站建设用免费素材做h5游戏的网站
  • 明星静态网站莆田有建设网站的公司码
  • 网站建设需求确认书win8风格门户网站
  • 犀牛云网站怎么建设app和微网站的对比分析
  • wordpress 层实现惠州市seo广告优化营销工具