chore: 批量新增各类工具脚本与配置文件
1. 新增音频录制、下载、上传相关脚本 2. 新增数据库操作、API调用工具 3. 新增Excel数据处理脚本 4. 新增弱密码检测脚本
This commit is contained in:
+137
@@ -0,0 +1,137 @@
|
||||
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())
|
||||
Reference in New Issue
Block a user