Files
guanjihuan.com/2025.11.04_langchain_running_code/langchain_running_code.py

74 lines
2.3 KiB
Python
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
This code is supported by the website: https://www.guanjihuan.com
The newest version of this code is on the web page: https://www.guanjihuan.com/archives/47925
"""
import os
import dotenv
from langchain_openai import ChatOpenAI
from langchain.agents import create_react_agent, AgentExecutor
from langchain_core.prompts import PromptTemplate
from langchain_experimental.tools import PythonREPLTool
# 加载环境变量
dotenv.load_dotenv()
# 初始化 LLM
llm = ChatOpenAI(
api_key=os.getenv("OPENAI_API_KEY"),
base_url=os.getenv("DASHSCOPE_BASE_URL"),
model="qwen-plus",
temperature=0,
)
# 使用官方 PythonREPLTool 注意:此工具可执行任意代码,仅用于安全环境)
tools = [PythonREPLTool()] # 直接实例化即可,它已是 Tool 类型
# 构建 ReAct Prompt
template = """你是一个严谨的 Python 编程助手,必须通过工具执行代码来验证逻辑,不能仅靠推理得出结论。
## 工具
你可以使用以下工具:
{tools}
## 规则
- 每次只能执行一个 Action。
- 所有 Python 代码必须通过工具执行,不得假设输出结果。
- **Action Input 必须是纯 Python 代码,不要包含 Markdown 代码块符号(如 ``` 或 ```python。**
- 如果测试失败(如 assert 报错),请根据错误信息修正代码并重新测试。
- 最终答案必须基于工具返回的正确执行结果。
- 输出必须严格遵循以下格式,不要添加额外内容。
Question: <用户问题>
Thought: <你的思考>
Action: <工具名称>
Action Input: <纯 Python 代码(不要 Markdown 代码块)>
Observation: <工具返回结果>
...(重复以上步骤)
Final Answer: <最终答案,包含正确函数和简要说明>
## 可用工具
{tool_names}
当前问题: {input_message}
{agent_scratchpad}"""
prompt = PromptTemplate.from_template(template)
# 创建并执行 Agent
agent = create_react_agent(llm, tools, prompt)
executor = AgentExecutor(
agent=agent,
tools=tools,
verbose=True,
max_iterations=10,
handle_parsing_errors=True
)
# 运行任务
if __name__ == "__main__":
response = executor.invoke({
"input_message": "请编写一个 Python 函数 fibonacci(n),返回第 n 个斐波那契数。测试通过后做代码的优化,并给出最终代码。"
})
print(response["output"])