Files
admin 2d8c1ea8f9 chore: 批量新增各类工具脚本与配置文件
1. 新增音频录制、下载、上传相关脚本
2. 新增数据库操作、API调用工具
3. 新增Excel数据处理脚本
4. 新增弱密码检测脚本
2026-06-14 17:47:15 +08:00

137 lines
3.8 KiB
Python

from langchain_openai import ChatOpenAI
from langchain_mcp_adapters.client import MultiServerMCPClient
from langchain_core.tools import StructuredTool, Tool
from langchain.agents import create_agent
import asyncio
def normalize_base_url(url):
"""标准化base_url,移除反引号和首尾空格,去除末尾斜杠"""
if url:
url = url.strip().strip('`').rstrip('/')
return url
# OpenAI配置
api_key = "sk-8d657b8b7efe0cb6c141a30d9cee97f726efb9b18ea72bb1e8cfb080b42c140d"
base_url = normalize_base_url("https://console.pivotbak.cfd/v1")
model_name = "MiniMax-M2.7-highspeed"
# MCP配置
mcp_server_url = normalize_base_url("http://192.168.0.10:9999/admin/mcp/sse")
# 全局参数 - 每次对话都要传递
team_id = 19
token = "f1d23a59-479c-44a8-94b5-2344e4672ffd"
# 初始化LLM,每次请求都会携带teamId和token
llm = ChatOpenAI(
model=model_name,
openai_api_key=api_key,
openai_api_base=base_url,
temperature=0.7,
max_tokens=4096,
extra_body={
"teamId": team_id,
"token": token
}
)
# 示例工具函数
def get_current_time():
"""获取当前时间"""
from datetime import datetime
return datetime.now().strftime("%Y-%m-%d %H:%M:%S")
def calculate(a: float, b: float, operation: str = "add") -> float:
"""
简单计算器
:param a: 第一个数
:param b: 第二个数
:param operation: 操作类型,可选 add, sub, mul, div
"""
if operation == "add":
return a + b
elif operation == "sub":
return a - b
elif operation == "mul":
return a * b
elif operation == "div":
if b == 0:
return "错误:除数不能为零"
return a / b
else:
return f"未知操作: {operation}"
# 定义工具
tools = [
Tool(
name="get_current_time",
func=get_current_time,
description="获取当前时间"
),
StructuredTool.from_function(calculate)
]
# 从MCP加载工具
async def load_mcp_tools():
mcp_client = MultiServerMCPClient(
{"server": {"url": mcp_server_url, "transport": "sse"}}
)
try:
mcp_tools = await mcp_client.get_tools()
print(f"从MCP服务器加载到 {len(mcp_tools)} 个工具:")
for tool in mcp_tools:
print(f" - {tool.name}: {tool.description}")
return mcp_tools
except Exception as e:
print(f"连接MCP服务器失败: {e}")
print("将继续使用本地工具")
return []
# 创建Agent
def create_my_agent(all_tools):
agent = create_agent(
model=llm,
tools=all_tools,
system_prompt="你是一个有用的助手,使用提供的工具来回答问题。"
)
return agent
# 测试示例
async def main():
print("=" * 60)
print("LangChain + MCP 测试")
print(f"模型: {model_name}")
print(f"API地址: {base_url}")
print(f"MCP地址: {mcp_server_url}")
print(f"Team ID: {team_id}")
print(f"Token: {token[:10]}..." if len(token) > 10 else token)
print("=" * 60)
# 加载MCP工具
mcp_tools = await load_mcp_tools()
all_tools = tools + mcp_tools
# 创建Agent
agent = create_my_agent(all_tools)
# 测试1: 直接对话
print("\n--- 测试1: 直接对话 ---")
response = llm.invoke("你好,介绍一下自己")
print(response.content)
# 测试2: 使用工具
print("\n--- 测试2: 使用工具 - 获取当前时间 ---")
result = await agent.ainvoke({
"messages": [("user", "现在几点了?")]
})
print(result["messages"][-1].content)
# 测试3: 使用计算器
print("\n--- 测试3: 使用工具 - 计算 ---")
result = await agent.ainvoke({
"messages": [("user", "计算 100 乘以 50 等于多少?")]
})
print(result["messages"][-1].content)
if __name__ == "__main__":
asyncio.run(main())