如何让LangChain Python Agent正确读取本地Python对象my_name并输出Tom
解决LangChain Python Agent无法正确读取预定义变量
my_name的问题 当前问题核心是Agent误解了指令,自行重新定义了my_name变量,没有读取你预先传入locals中的值。以下是两种可行的解决方法:
方案一:明确指令,避免Agent重新定义变量
修改执行指令,明确要求Agent直接使用已存在的变量,不要重新定义:
agent_executor_openAI.run("直接打印当前已存在的Python变量my_name,不要重新定义该变量")
方案二:通过系统提示强化变量存在的信息
在创建Agent时,添加自定义系统提示,明确告知Agent可以直接使用预定义的my_name变量:
from dotenv import load_dotenv, find_dotenv import openai import os from langchain.chat_models import ChatOpenAI from langchain.agents.agent_types import AgentType from langchain_experimental.agents.agent_toolkits import create_python_agent from langchain_experimental.tools import PythonREPLTool from langchain.prompts import SystemMessagePromptTemplate, ChatPromptTemplate load_dotenv(find_dotenv()) openai.api_key = os.environ["OPENAI_API_KEY"] my_name = "tom" # 构建系统提示,告知Agent可直接使用已存在的变量 system_prompt = SystemMessagePromptTemplate.from_template( "你可以直接使用已存在的Python变量my_name,无需重新定义。请严格按照用户指令操作。" ) prompt = ChatPromptTemplate.from_messages([system_prompt]) agent_executor_openAI = create_python_agent( llm=ChatOpenAI(temperature=0, model="gpt-4-1106-preview"), tool=PythonREPLTool(locals={"my_name": my_name}), verbose=True, agent_type=AgentType.OPENAI_FUNCTIONS, agent_executor_kwargs={"handle_parsing_errors": True}, agent_kwargs={"prompt": prompt} ) agent_executor_openAI.run("打印变量my_name的值")
修改后,Agent会直接调用print(my_name),正确输出预定义的tom。
内容的提问来源于stack exchange,提问作者kurt
相关产品推荐
相关产品推荐

