This commit is contained in:
2025-11-04 16:50:37 +08:00
parent 2260306c87
commit 1802b75341
5 changed files with 91 additions and 0 deletions

View File

@@ -1,3 +1,8 @@
"""
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/47909
"""
import langchain_openai
from langchain_core.prompts import ChatPromptTemplate
import dotenv

View File

@@ -1,3 +1,8 @@
"""
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/47909
"""
import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI

View File

@@ -1,3 +1,8 @@
"""
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/47909
"""
import os
import dotenv
from langchain_openai import ChatOpenAI

View File

@@ -0,0 +1,2 @@
OPENAI_API_KEY=xxx
DASHSCOPE_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1

View File

@@ -0,0 +1,74 @@
"""
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"])