# -- coding: utf-8 -- import os from dotenv import load_dotenv from langchain.agents import AgentExecutor, create_structured_chat_agent from langchain_core.tools import Tool from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate from datetime import datetime import re import json
加载环境变量
load_dotenv()
========================
1. 配置 LLM
========================
DEEPSEEK_API_KEY = “123” # 替换为实际的 API Key llm = ChatOpenAI(
api_key=DEEPSEEK_API_KEY, base_url="http://192.168.0.100:8000/v1", # Deepseek 的 API 基础地址 model="Qwen3-235B-A22B", # Deepseek 对话模型(可选:deepseek-chat-pro 等高级模型) temperature=0.1, # 温度参数(0-1,越低越稳定) max_tokens=1024 # 最大生成 tokens
)
========================
2. 工具定义
========================
def get_current_time(input_str: str = “”) -> str:
"""获取当前系统时间""" return f"当前时间:{datetime.now().strftime('%Y年%m月%d日 %H:%M:%S')}"
def calculate_math_expression(expression: str) -> str:
"""安全计算数学表达式""" try: if not re.match(r'^[d+-*/().s]+$', expression): return "表达式包含非法字符" result = eval(expression, {"__builtins__": {}}, {}) return f"计算结果:{result}" except: return "计算失败"
tools = [
Tool( name="GetCurrentTime", func=get_current_time, description="获取当前系统时间,输入为空字符串" ), Tool( name="CalculateMathExpression", func=calculate_math_expression, description="计算数学表达式" )
]
========================
3. 【关键修复】超强约束 Prompt,禁止输出 标签
========================
prompt = ChatPromptTemplate.from_messages([
("system", """
你必须只输出纯 JSON,绝对禁止输出 、思考过程、解释文字、中文说明等任何内容。
可用工具: {tools}
工具名称: {tool_names}
【输出格式 严格遵守】 {{“action”:“工具名”,“action_input”:“输入内容”}}
完成任务后输出: {{“action”:“Final Answer”,“action_input”:“直接回答结果”}}
禁止任何多余文字!只输出 JSON! “”“),
("human", "{input}"), ("ai", "{agent_scratchpad}"),
])
========================
4. 创建 Agent
========================
agent = create_structured_chat_agent(llm, tools, prompt)
agent_executor = AgentExecutor(
agent=agent, tools=tools, verbose=True, handle_parsing_errors=True, # 容错解析错误 max_iterations=3,
)
========================
5. 测试
========================
if name == “main”:
print("🔍 任务1:获取当前时间") result1 = agent_executor.invoke({"input": "现在几点了?只告诉我结果"}) print("✅ 最终答案:", result1["output"]) print("
” + “=”*60 + “ “)
print("🧮 任务2:数学计算") result2 = agent_executor.invoke({"input": "计算 100*(25+15)/4 - 80 等于多少?"}) print("✅ 最终答案:", result2["output"])
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/253735.html