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

小黑大语言模型应用探索:langchain智能体构造源码demo搭建1(初步流程)

导入工具包

rom 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.chains.llm import LLMChain
from langchain_openai import ChatOpenAI

langchain初始化智能体源码中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”
}}}}


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**exponent

大语言模型接口初始化

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

定义工作流

tools = [multiply, add, exponentiate]
prompt = create_prompt(tools=tools)
llm = ChatOpenAI(temperature=0.01,model="glm-4-flash",openai_api_key=zhipu_key,openai_api_base="https://open.bigmodel.cn/api/paas/v4/"
)

定义智能体

from langchain.agents import StructuredChatAgent
from langchain.agents.structured_chat.output_parser import StructuredChatOutputParserWithRetries
# 定义智能体
structuredChatAgent = StructuredChatAgent(llm_chain=llm_chain,allowed_tools=[tool.name for tool in tools],output_parser=StructuredChatOutputParserWithRetries())

运行智能体

from langchain.agents.agent import AgentExecutor
# 执行智能体
excuter = AgentExecutor.from_agent_and_tools(agent=structuredChatAgent,tools=tools,callback_manager=None,verbose=True)excuter.invoke("调用api计算3加5乘2等于多少?")

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

http://www.xdnf.cn/news/734041.html

相关文章:

  • OptiStruct实例:消声器前盖ERP分析(2)RADSND基础理论
  • 深入解析 Redis Cluster 架构与实现(二)
  • 【sa-token】 sa-token非 web 上下文无法获取 HttpServletRequest。
  • 数据结构:导论
  • SpringBatch+Mysql+hanlp简版智能搜索
  • matlab计算转子系统的固有频率、振型、不平衡响应
  • StringBuilder对象的操作
  • cocos creator资源管理器,资源动态加载和释放
  • 基于Qt封装数据库基本增删改查操作,支持多线程,并实现SQLite数据库单例访问
  • 【google 论文】Titans: Learning to Memorize at Test Time
  • 裂缝仪在线监测装置:工程安全领域的“实时守卫者”
  • DrissionPage WebPage模式:动态交互与高效爬取的完美平衡术
  • C# 将HTML文档、HTML字符串转换为图片
  • Window10+ 安装 go环境
  • 深入探索:基于 Nacos 的配置管理之动态配置与环境管理
  • Lifecycle原理
  • 低秩矩阵、奇异值矩阵和正交矩阵
  • 【FlashRAG】本地部署与demo运行(一)
  • ArcGIS应用指南:基于网格与OD成本矩阵的交通可达性分析
  • AI时代的园区网变革:“极简”行至最深处,以太彩光恰自来
  • 【C++】位图
  • 前端pointer-events属性
  • 显卡3080和4060哪个强 两款游戏性能对比
  • 重拾Scrapy框架
  • Clish中xml文件配置的使用方法
  • Spring Cloud Alibaba 学习 —— 简单了解常用技术栈
  • 【专题】神经网络期末复习资料(题库)
  • 二、Python提供了丰富的内置工具,无需额外安装即可使用
  • 6个月Python学习计划 Day 9 - 函数进阶用法
  • 【ROS2实体机械臂驱动】rokae xCoreSDK Python测试使用