- 新增 Go 语言后端服务(server/),包含用户认证、Agent管理、数据库连接等API - 新增 Python Agent 服务(agent/),实现Agent核心逻辑和工具集 - 前端从原生HTML迁移到Vue.js框架(web/src/) - 添加 Docker Compose 支持(docker-compose.yml) - 添加项目架构文档(docs/ARCHITECTURE.md) - 添加环境变量示例(.env.example)和本地启动脚本(start-local.ps1) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
88 lines
2.5 KiB
Python
88 lines
2.5 KiB
Python
"""
|
||
网页搜索工具
|
||
"""
|
||
import httpx
|
||
from typing import Optional
|
||
|
||
|
||
async def search_web(query: str, max_results: int = 5) -> dict:
|
||
"""
|
||
搜索网页获取信息
|
||
|
||
Args:
|
||
query: 搜索关键词
|
||
max_results: 返回结果数量
|
||
|
||
Returns:
|
||
搜索结果
|
||
"""
|
||
# 这里可以使用搜索引擎API,如 Google, Bing, DuckDuckGo 等
|
||
# 示例使用 DuckDuckGo API(免费)
|
||
|
||
try:
|
||
async with httpx.AsyncClient() as client:
|
||
response = await client.get(
|
||
"https://api.duckduckgo.com/",
|
||
params={
|
||
"q": query,
|
||
"format": "json",
|
||
"no_html": 1,
|
||
"skip_disambig": 1
|
||
},
|
||
timeout=10.0
|
||
)
|
||
|
||
if response.status_code == 200:
|
||
data = response.json()
|
||
results = []
|
||
|
||
# 提取相关主题
|
||
if "RelatedTopics" in data:
|
||
for item in data["RelatedTopics"][:max_results]:
|
||
if "Text" in item:
|
||
results.append({
|
||
"title": item.get("Text", "").split(" - ")[0] if " - " in item.get("Text", "") else "",
|
||
"content": item.get("Text", ""),
|
||
"url": item.get("URL", "")
|
||
})
|
||
|
||
return {
|
||
"success": True,
|
||
"query": query,
|
||
"results": results,
|
||
"count": len(results)
|
||
}
|
||
else:
|
||
return {
|
||
"success": False,
|
||
"error": f"Search API returned status {response.status_code}"
|
||
}
|
||
|
||
except Exception as e:
|
||
return {
|
||
"success": False,
|
||
"error": str(e)
|
||
}
|
||
|
||
|
||
# 工具定义(用于 LLM)
|
||
TOOL_DEFINITION = {
|
||
"name": "search",
|
||
"description": "Search the web for information. Use this when you need to find current information or facts.",
|
||
"parameters": {
|
||
"type": "object",
|
||
"properties": {
|
||
"query": {
|
||
"type": "string",
|
||
"description": "The search query"
|
||
},
|
||
"max_results": {
|
||
"type": "integer",
|
||
"description": "Maximum number of results to return",
|
||
"default": 5
|
||
}
|
||
},
|
||
"required": ["query"]
|
||
}
|
||
}
|