@agentunion/kite 1.4.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +102 -0
- package/cli.js +44 -5
- package/core/dependency_checker.py +250 -0
- package/core/env_checker.py +490 -0
- package/dependencies_lock.json +128 -0
- package/extensions/agents/assistant/server.py +33 -17
- package/extensions/channels/acp_channel/server.py +33 -17
- package/extensions/services/backup/entry.py +23 -16
- package/extensions/services/evol/auth_manager.py +443 -0
- package/extensions/services/evol/config.yaml +149 -0
- package/extensions/services/evol/config_loader.py +117 -0
- package/extensions/services/evol/entry.py +406 -0
- package/extensions/services/evol/evol_api.py +173 -0
- package/extensions/services/evol/evol_config.json5 +29 -0
- package/extensions/services/evol/migrate_tokens.py +122 -0
- package/extensions/services/evol/module.md +32 -0
- package/extensions/services/evol/pairing.py +250 -0
- package/extensions/services/evol/pairing_codes.jsonl +1 -0
- package/extensions/services/evol/relay.py +682 -0
- package/extensions/services/evol/relay_config.json5 +67 -0
- package/extensions/services/evol/routes/__init__.py +1 -0
- package/extensions/services/evol/routes/routes_management_ws.py +127 -0
- package/extensions/services/evol/routes/routes_rpc.py +89 -0
- package/extensions/services/evol/routes/routes_test.py +61 -0
- package/extensions/services/evol/server.py +875 -0
- package/extensions/services/evol/static/css/style.css +1200 -0
- package/extensions/services/evol/static/index.html +781 -0
- package/extensions/services/evol/static/index_evol.html +14 -0
- package/extensions/services/evol/static/js/app.js +6304 -0
- package/extensions/services/evol/static/js/auth.js +326 -0
- package/extensions/services/evol/static/js/dialog.js +285 -0
- package/extensions/services/evol/static/js/evol-app-fixed.js +50 -0
- package/extensions/services/evol/static/js/evol-app.js +1949 -0
- package/extensions/services/evol/static/js/evol-app.js.bak +1800 -0
- package/extensions/services/evol/static/js/kernel-client-example.js +228 -0
- package/extensions/services/evol/static/js/kernel-client.js +396 -0
- package/extensions/services/evol/static/js/main.js +141 -0
- package/extensions/services/evol/static/js/registry-tests.js +585 -0
- package/extensions/services/evol/static/js/stats.js +217 -0
- package/extensions/services/evol/static/js/token-manager.js +175 -0
- package/extensions/services/evol/static/pairing.html +248 -0
- package/extensions/services/evol/static/test_registry.html +262 -0
- package/extensions/services/evol/static/test_relay.html +462 -0
- package/extensions/services/evol/stats_manager.py +240 -0
- package/extensions/services/model_service/entry.py +23 -1
- package/extensions/services/proxy/.claude/settings.local.json +13 -0
- package/extensions/services/proxy/CHANGELOG_20260308.md +258 -0
- package/extensions/services/proxy/_fix_prints.py +133 -0
- package/extensions/services/proxy/_fix_prints2.py +87 -0
- package/extensions/services/proxy/agentcp/LICENCE +178 -0
- package/extensions/services/proxy/agentcp/README copy.md +85 -0
- package/extensions/services/proxy/agentcp/README.md +260 -0
- package/extensions/services/proxy/agentcp/__init__.py +16 -0
- package/extensions/services/proxy/agentcp/agent.py +4 -0
- package/extensions/services/proxy/agentcp/agentcp.py +2494 -0
- package/extensions/services/proxy/agentcp/agentprofile.json +89 -0
- package/extensions/services/proxy/agentcp/ap/__init__.py +16 -0
- package/extensions/services/proxy/agentcp/ap/ap_client.py +316 -0
- package/extensions/services/proxy/agentcp/assets/images/wechat_qr.png +0 -0
- package/extensions/services/proxy/agentcp/backup/metrics.json +31 -0
- package/extensions/services/proxy/agentcp/base/__init__.py +20 -0
- package/extensions/services/proxy/agentcp/base/auth_client.py +257 -0
- package/extensions/services/proxy/agentcp/base/client.py +112 -0
- package/extensions/services/proxy/agentcp/base/env.py +34 -0
- package/extensions/services/proxy/agentcp/base/html_util.py +336 -0
- package/extensions/services/proxy/agentcp/base/log.py +98 -0
- package/extensions/services/proxy/agentcp/ca/__init__.py +17 -0
- package/extensions/services/proxy/agentcp/ca/ca_client.py +414 -0
- package/extensions/services/proxy/agentcp/ca/ca_root.py +74 -0
- package/extensions/services/proxy/agentcp/context/__init__.py +20 -0
- package/extensions/services/proxy/agentcp/context/context.py +73 -0
- package/extensions/services/proxy/agentcp/context/exceptions.py +114 -0
- package/extensions/services/proxy/agentcp/create_profile.py +125 -0
- package/extensions/services/proxy/agentcp/create_profile_weather.py +125 -0
- package/extensions/services/proxy/agentcp/db/__init__.py +15 -0
- package/extensions/services/proxy/agentcp/db/db_mananger.py +550 -0
- package/extensions/services/proxy/agentcp/docs/UDP_HEARTBEAT_FIX_REPORT.md +265 -0
- package/extensions/services/proxy/agentcp/docs/heartbeat_issue_analysis.md +291 -0
- package/extensions/services/proxy/agentcp/file/__init__.py +16 -0
- package/extensions/services/proxy/agentcp/file/file_client.py +141 -0
- package/extensions/services/proxy/agentcp/file/wss_binary_message.py +137 -0
- package/extensions/services/proxy/agentcp/hcp.py +299 -0
- package/extensions/services/proxy/agentcp/heartbeat/__init__.py +16 -0
- package/extensions/services/proxy/agentcp/heartbeat/heartbeat_client.py +360 -0
- package/extensions/services/proxy/agentcp/improved_scheduler.py +498 -0
- package/extensions/services/proxy/agentcp/llm_agent_utils.py +249 -0
- package/extensions/services/proxy/agentcp/llm_server.py +172 -0
- package/extensions/services/proxy/agentcp/mermaid.py +210 -0
- package/extensions/services/proxy/agentcp/message.py +149 -0
- package/extensions/services/proxy/agentcp/metrics.py +256 -0
- package/extensions/services/proxy/agentcp/monitoring/__init__.py +20 -0
- package/extensions/services/proxy/agentcp/monitoring/global_monitor.py +27 -0
- package/extensions/services/proxy/agentcp/monitoring/metrics_store.py +325 -0
- package/extensions/services/proxy/agentcp/monitoring/monitoring_service.py +269 -0
- package/extensions/services/proxy/agentcp/monitoring/sliding_window.py +222 -0
- package/extensions/services/proxy/agentcp/monitoring/standalone_reader.py +224 -0
- package/extensions/services/proxy/agentcp/msg/__init__.py +21 -0
- package/extensions/services/proxy/agentcp/msg/connection_manager.py +456 -0
- package/extensions/services/proxy/agentcp/msg/message_client.py +2058 -0
- package/extensions/services/proxy/agentcp/msg/message_serialize.py +263 -0
- package/extensions/services/proxy/agentcp/msg/open_ai_message.py +88 -0
- package/extensions/services/proxy/agentcp/msg/session_manager.py +1062 -0
- package/extensions/services/proxy/agentcp/msg/stream_client.py +267 -0
- package/extensions/services/proxy/agentcp/msg/websocket_file_receiver.py +89 -0
- package/extensions/services/proxy/agentcp/msg/ws_logger.py +685 -0
- package/extensions/services/proxy/agentcp/msg/wss_binary_message.py +137 -0
- package/extensions/services/proxy/agentcp/requirements.txt +7 -0
- package/extensions/services/proxy/agentcp/samples/agent_graph/README.md +37 -0
- package/extensions/services/proxy/agentcp/samples/agent_graph/agentprofile.json +89 -0
- package/extensions/services/proxy/agentcp/samples/agent_graph/create_profile.py +138 -0
- package/extensions/services/proxy/agentcp/samples/agent_graph/main.py +164 -0
- package/extensions/services/proxy/agentcp/samples/agent_use/create_profile.py +123 -0
- package/extensions/services/proxy/agentcp/samples/agent_use/llm/create_profile.py +129 -0
- package/extensions/services/proxy/agentcp/samples/agent_use/llm/env.json +5 -0
- package/extensions/services/proxy/agentcp/samples/agent_use/llm/main.py +146 -0
- package/extensions/services/proxy/agentcp/samples/agent_use/main.py +123 -0
- package/extensions/services/proxy/agentcp/samples/agent_use/readme.md +379 -0
- package/extensions/services/proxy/agentcp/samples/agent_use/search/create_profile.py +129 -0
- package/extensions/services/proxy/agentcp/samples/agent_use/search/main.py +28 -0
- package/extensions/services/proxy/agentcp/samples/agent_use/tool/create_profile.py +129 -0
- package/extensions/services/proxy/agentcp/samples/agent_use/tool/main.py +20 -0
- package/extensions/services/proxy/agentcp/samples/ali_amap/README.md +97 -0
- package/extensions/services/proxy/agentcp/samples/ali_amap/amap_agent.py +88 -0
- package/extensions/services/proxy/agentcp/samples/ali_amap/create_profile.py +125 -0
- package/extensions/services/proxy/agentcp/samples/compute_agent/agent/powershell.py +228 -0
- package/extensions/services/proxy/agentcp/samples/compute_agent/agent/software.py +63 -0
- package/extensions/services/proxy/agentcp/samples/compute_agent/agent/tools.py +36 -0
- package/extensions/services/proxy/agentcp/samples/compute_agent/browser_user.py +41 -0
- package/extensions/services/proxy/agentcp/samples/deepseek/README.md +79 -0
- package/extensions/services/proxy/agentcp/samples/deepseek/create_profile.py +126 -0
- package/extensions/services/proxy/agentcp/samples/deepseek/deepseek.py +42 -0
- package/extensions/services/proxy/agentcp/samples/dify_chat/README.md +78 -0
- package/extensions/services/proxy/agentcp/samples/dify_chat/create_profile.py +126 -0
- package/extensions/services/proxy/agentcp/samples/dify_chat/dify_chat.py +47 -0
- package/extensions/services/proxy/agentcp/samples/dify_workflow/README.md +78 -0
- package/extensions/services/proxy/agentcp/samples/dify_workflow/create_profile.py +126 -0
- package/extensions/services/proxy/agentcp/samples/dify_workflow/dify_workflow.py +46 -0
- package/extensions/services/proxy/agentcp/samples/executor/README.md +44 -0
- package/extensions/services/proxy/agentcp/samples/executor/agentprofile.json +89 -0
- package/extensions/services/proxy/agentcp/samples/executor/create_profile.py +139 -0
- package/extensions/services/proxy/agentcp/samples/executor/main.py +160 -0
- package/extensions/services/proxy/agentcp/samples/filereader/README.md +45 -0
- package/extensions/services/proxy/agentcp/samples/filereader/agentprofile.json +90 -0
- package/extensions/services/proxy/agentcp/samples/filereader/create_profile.py +137 -0
- package/extensions/services/proxy/agentcp/samples/filereader/main.py +253 -0
- package/extensions/services/proxy/agentcp/samples/filewriter/README.md +38 -0
- package/extensions/services/proxy/agentcp/samples/filewriter/agentprofile.json +91 -0
- package/extensions/services/proxy/agentcp/samples/filewriter/create_profile.py +138 -0
- package/extensions/services/proxy/agentcp/samples/filewriter/main.py +289 -0
- package/extensions/services/proxy/agentcp/samples/hcp/README.md +85 -0
- package/extensions/services/proxy/agentcp/samples/hcp/acp_weather_agent.zip +0 -0
- package/extensions/services/proxy/agentcp/samples/hcp/create_profile.py +125 -0
- package/extensions/services/proxy/agentcp/samples/hcp/hcp.py +237 -0
- package/extensions/services/proxy/agentcp/samples/helloworld/README.md +68 -0
- package/extensions/services/proxy/agentcp/samples/helloworld/hello_world.py +40 -0
- package/extensions/services/proxy/agentcp/samples/llm_agent/MEADME.md +117 -0
- package/extensions/services/proxy/agentcp/samples/llm_agent/create_profile.py +125 -0
- package/extensions/services/proxy/agentcp/samples/llm_agent/qwen_agent.py +136 -0
- package/extensions/services/proxy/agentcp/samples/local_llm_agent/README.md +90 -0
- package/extensions/services/proxy/agentcp/samples/local_llm_agent/create_profile.py +125 -0
- package/extensions/services/proxy/agentcp/samples/local_llm_agent/main.py +49 -0
- package/extensions/services/proxy/agentcp/samples/query_llm_from_agent/README.md +55 -0
- package/extensions/services/proxy/agentcp/samples/query_llm_from_agent/create_profile.py +125 -0
- package/extensions/services/proxy/agentcp/samples/query_llm_from_agent/main.py +23 -0
- package/extensions/services/proxy/agentcp/samples/query_weather_api_agent/README.md +103 -0
- package/extensions/services/proxy/agentcp/samples/query_weather_api_agent/create_profile.py +125 -0
- package/extensions/services/proxy/agentcp/samples/query_weather_api_agent/main.py +69 -0
- package/extensions/services/proxy/agentcp/samples/query_weather_from_agent/README.md +58 -0
- package/extensions/services/proxy/agentcp/samples/query_weather_from_agent/create_profile.py +125 -0
- package/extensions/services/proxy/agentcp/samples/query_weather_from_agent/main.py +25 -0
- package/extensions/services/proxy/agentcp/samples/qwen3/README.md +71 -0
- package/extensions/services/proxy/agentcp/samples/qwen3/create_profile.py +126 -0
- package/extensions/services/proxy/agentcp/samples/qwen3/qwen3.py +37 -0
- package/extensions/services/proxy/agentcp/samples/qwen3_tools/README.md +133 -0
- package/extensions/services/proxy/agentcp/samples/qwen3_tools/create_profile.py +126 -0
- package/extensions/services/proxy/agentcp/samples/qwen3_tools/qwen3_tools.py +98 -0
- package/extensions/services/proxy/agentcp/samples/search/create_profile_qwen.py +125 -0
- package/extensions/services/proxy/agentcp/samples/search/create_profile_search.py +125 -0
- package/extensions/services/proxy/agentcp/samples/search/qwen_agent.py +136 -0
- package/extensions/services/proxy/agentcp/samples/search/search_agent.py +170 -0
- package/extensions/services/proxy/agentcp/samples/wrapper_agently_to_agent/README.md +89 -0
- package/extensions/services/proxy/agentcp/samples/wrapper_agently_to_agent/create_profile.py +125 -0
- package/extensions/services/proxy/agentcp/samples/wrapper_agently_to_agent/main.py +44 -0
- package/extensions/services/proxy/agentcp/utils/__init__.py +15 -0
- package/extensions/services/proxy/agentcp/utils/file_util.py +117 -0
- package/extensions/services/proxy/agentcp/utils/proxy_bypass.py +99 -0
- package/extensions/services/proxy/agentcp/workflow.py +203 -0
- package/extensions/services/proxy/console_auth.py +109 -0
- package/extensions/services/proxy/evol/__init__.py +1 -0
- package/extensions/services/proxy/evol/config.py +37 -0
- package/extensions/services/proxy/evol/http/__init__.py +1 -0
- package/extensions/services/proxy/evol/http/async_http.py +551 -0
- package/extensions/services/proxy/evol/log.py +28 -0
- package/extensions/services/proxy/evol/presenter/__init__.py +2 -0
- package/extensions/services/proxy/evol/presenter/agentIdPresenter.py +1031 -0
- package/extensions/services/proxy/evol/presenter/apikeyPresenter.py +106 -0
- package/extensions/services/proxy/evol/presenter/configPresenter.py +1281 -0
- package/extensions/services/proxy/evol/presenter/userPresenter.py +477 -0
- package/extensions/services/proxy/evol/server/__init__.py +1 -0
- package/extensions/services/proxy/evol/server/claude_proxy_async.py +3430 -0
- package/extensions/services/proxy/evol/server/openclaw_proxy.py +1861 -0
- package/extensions/services/proxy/evol/server/proxy_config.py +15 -0
- package/extensions/services/proxy/evol/server/proxy_engine.py +501 -0
- package/extensions/services/proxy/evol/version.py +24 -0
- package/extensions/services/proxy/logs/websocket.log +260 -0
- package/extensions/services/proxy/main.py +240 -0
- package/extensions/services/proxy/requirements.txt +13 -0
- package/extensions/services/proxy/server.py +271 -0
- package/extensions/services/watchdog/entry.py +42 -16
- package/extensions/services/watchdog/module.md +1 -0
- package/extensions/services/watchdog/monitor.py +34 -4
- package/extensions/services/web/module.md +1 -1
- package/extensions/services/web/server.py +30 -18
- package/extensions/services/web/static/js/token-manager.js +10 -10
- package/kernel/entry.py +1 -1
- package/kernel/module.md +25 -1
- package/kernel/registry_store.py +2 -26
- package/kernel/rpc_router.py +36 -10
- package/kernel/server.py +106 -17
- package/kite_cli/commands/deps_install.py +67 -0
- package/kite_cli/commands/env_check.py +45 -0
- package/kite_cli/commands/prepare.py +49 -0
- package/kite_cli/commands/venv_setup.py +56 -0
- package/kite_cli/main.py +29 -1
- package/launcher/entry.py +306 -21
- package/launcher/module.md +9 -0
- package/launcher/module_scanner.py +11 -1
- package/main.py +4 -1
- package/package.json +8 -1
- package/python_version.json +4 -0
- package/requirements.txt +38 -0
- package/scripts/env-manager.js +328 -0
- package/scripts/python-env.js +79 -0
- package/scripts/scan_dependencies.py +461 -0
- package/scripts/setup-python-env.js +191 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
## 使用指南
|
|
2
|
+
### 1、环境要求
|
|
3
|
+
- Python 3.8+
|
|
4
|
+
- [AgentCP SDK](https://pypi.org/project/agentcp/)
|
|
5
|
+
|
|
6
|
+
### 2、安装依赖
|
|
7
|
+
|
|
8
|
+
安装必要的Python库:
|
|
9
|
+
```bash
|
|
10
|
+
pip install agentcp
|
|
11
|
+
```
|
|
12
|
+
### 3、创建身份ID
|
|
13
|
+
```bash
|
|
14
|
+
python create_profile.py
|
|
15
|
+
```
|
|
16
|
+
### 4、修改main.py文件
|
|
17
|
+
1. 将seed_password、agent_id修改为上一步创建的身份信息
|
|
18
|
+
2. 将 llm_agent_id修改为你想要调用的[agent_id](https://www.agentunion.cn/)
|
|
19
|
+
|
|
20
|
+
### 5、执行main.py代码
|
|
21
|
+
```bash
|
|
22
|
+
python main.py
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## 功能简介
|
|
26
|
+
该 Agent 展示了如何基于 `agentcp` 实现一个天气查询服务 Agent。你可以通过本地 Agent 与大模型 Agent 进行通信,从而实现函数调用能力,例如获取天气信息。
|
|
27
|
+
|
|
28
|
+
- 接收并处理用户的消息请求
|
|
29
|
+
- 转发查询请求到目标大模型 Agent
|
|
30
|
+
- 自动调用工具函数(如 get_weather)并返回结果
|
|
31
|
+
- 处理大模型 Agent 的回复并返回给用户
|
|
32
|
+
|
|
33
|
+
## 完整示例代码
|
|
34
|
+
```python
|
|
35
|
+
import agentcp
|
|
36
|
+
import json
|
|
37
|
+
import time
|
|
38
|
+
tools=[{
|
|
39
|
+
"type": "function",
|
|
40
|
+
"function": {
|
|
41
|
+
"name": "get_weather",
|
|
42
|
+
"description": "Retrieves the current weather report for a specified city",
|
|
43
|
+
"parameters": {
|
|
44
|
+
"type": "object",
|
|
45
|
+
"properties": {
|
|
46
|
+
"city": {
|
|
47
|
+
"type": "string",
|
|
48
|
+
"description": "The name of the city for which to retrieve the weather report"
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"required": ["city"]
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}]
|
|
55
|
+
def get_weather(city: str) -> str:
|
|
56
|
+
return f"{city}的天气是晴朗,温度适宜,20~30度"
|
|
57
|
+
|
|
58
|
+
def call_function(name, args):
|
|
59
|
+
if name == "get_weather":
|
|
60
|
+
return get_weather(**args)
|
|
61
|
+
else:
|
|
62
|
+
return f"Function {name} not found"
|
|
63
|
+
|
|
64
|
+
if __name__ == "__main__":
|
|
65
|
+
llm_agent_id = "your_llm_agent_id_from_mu"
|
|
66
|
+
agent_id = 'your_agent_id_from_profile'
|
|
67
|
+
acp = agentcp.AgentCP('.', seed_password='')
|
|
68
|
+
aid = acp.load_aid(agent_id)
|
|
69
|
+
async def reply_message_handler(reply_msg, sender, session_id):
|
|
70
|
+
message_json = json.loads(reply_msg.get("message"))
|
|
71
|
+
if isinstance(message_json, list) and len(message_json) > 0:
|
|
72
|
+
message_json = message_json[0]
|
|
73
|
+
type = message_json.get("type")
|
|
74
|
+
if type == "tool_call":
|
|
75
|
+
tool = json.loads(message_json.get("content"))
|
|
76
|
+
tool_name = tool.get("tool_name")
|
|
77
|
+
tool_args = tool.get("tool_args")
|
|
78
|
+
tool_result = call_function(tool_name, tool_args)
|
|
79
|
+
aid.quick_send_messsage_content(llm_agent_id, tool_result, lambda reply_msg: reply_message_handler(reply_msg, sender, session_id))
|
|
80
|
+
else:
|
|
81
|
+
reply_text = aid.get_content_from_message(reply_msg)
|
|
82
|
+
aid.send_message_content(to_aid_list=[sender], session_id=session_id, llm_content=reply_text)
|
|
83
|
+
|
|
84
|
+
@aid.message_handler()
|
|
85
|
+
async def sync_message_handler(msg):
|
|
86
|
+
receiver = aid.get_receiver_from_message(msg)
|
|
87
|
+
if aid.id not in receiver:
|
|
88
|
+
return
|
|
89
|
+
session_id = aid.get_session_id_from_message(msg)
|
|
90
|
+
sender = aid.get_sender_from_message(msg)
|
|
91
|
+
sender_content = aid.get_content_from_message(msg)
|
|
92
|
+
msg_block = {
|
|
93
|
+
"type": "content",
|
|
94
|
+
"status": "success",
|
|
95
|
+
"timestamp": int(time.time() * 1000),
|
|
96
|
+
"content": sender_content,
|
|
97
|
+
"tools": tools
|
|
98
|
+
}
|
|
99
|
+
aid.quick_send_messsage(llm_agent_id, msg_block, lambda reply_msg: reply_message_handler(reply_msg, sender, session_id))
|
|
100
|
+
return True
|
|
101
|
+
aid.online()
|
|
102
|
+
acp.serve_forever()
|
|
103
|
+
```
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
from datetime import datetime, timezone
|
|
2
|
+
import agentcp
|
|
3
|
+
from pathlib import Path # 新增导入
|
|
4
|
+
import json
|
|
5
|
+
def create_financial_analyzer_json(publisherInfo):
|
|
6
|
+
"""创建智能体能力、权限描述"""
|
|
7
|
+
profile_json_data = {
|
|
8
|
+
"publisherInfo": publisherInfo,
|
|
9
|
+
"avaUrl": "https://img0.baidu.com/it/u=727206602,4114969606&fm=253&fmt=auto&app=138&f=JPEG?w=285&h=285",
|
|
10
|
+
"version": "1.0.0",
|
|
11
|
+
"lastUpdated": datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ"),
|
|
12
|
+
"name": "通过API查询天气",
|
|
13
|
+
"description": "大模型选择工具集,可以根据用户的需求,选择合适的工具进行查询。",
|
|
14
|
+
"capabilities": {
|
|
15
|
+
"core": ["天气查询"],
|
|
16
|
+
"extended": []
|
|
17
|
+
},
|
|
18
|
+
"llm":{
|
|
19
|
+
"model":"", #模型名称,或使用aid
|
|
20
|
+
"num_parameters":"", #模型参数量(如"7B"表示70亿参数)
|
|
21
|
+
"quantization_bits":"", #量化位数(如Q4表示4位量化)
|
|
22
|
+
"context_length":"", #上下文长度(如"4096"表示4096个token)
|
|
23
|
+
},
|
|
24
|
+
"references": {
|
|
25
|
+
"knowledgeBases": [""],
|
|
26
|
+
"tools": [""],
|
|
27
|
+
"companyInfo": [""],
|
|
28
|
+
"productInfo": [""]
|
|
29
|
+
},
|
|
30
|
+
"authorization": {
|
|
31
|
+
"modes": ["free"],
|
|
32
|
+
"fee": {},
|
|
33
|
+
"description": "当前智能体免费使用,无费用",
|
|
34
|
+
"sla": {}
|
|
35
|
+
},
|
|
36
|
+
"input": {
|
|
37
|
+
"types": ["content"], # 目前支持"content", "search", "reasoning_content", "error", 'file',后续会支持语音视频流
|
|
38
|
+
"formats": ["json"], # 详细类型
|
|
39
|
+
"examples": {
|
|
40
|
+
"type": "content",
|
|
41
|
+
"format": "text",
|
|
42
|
+
"content": "搜索智能体:xxx"
|
|
43
|
+
},
|
|
44
|
+
"semantics": [""],
|
|
45
|
+
"compatibleAids": ["*"]
|
|
46
|
+
},
|
|
47
|
+
"output": {
|
|
48
|
+
"types": ["content"],
|
|
49
|
+
"formats": ["markdown"],
|
|
50
|
+
"examples": {
|
|
51
|
+
"type": "content",
|
|
52
|
+
"format": "markdown",
|
|
53
|
+
"content": ""
|
|
54
|
+
},
|
|
55
|
+
"semantics": [""],
|
|
56
|
+
"compatibleAids": [""]
|
|
57
|
+
},
|
|
58
|
+
"supportStream": True, # False代表当前智能体不支持流式输出
|
|
59
|
+
"supportAsync": True,
|
|
60
|
+
"permission": ["*"]
|
|
61
|
+
}
|
|
62
|
+
return profile_json_data
|
|
63
|
+
|
|
64
|
+
def write_agent_profile_json(json_data):
|
|
65
|
+
try:
|
|
66
|
+
import os
|
|
67
|
+
json_path = Path(__file__).resolve()
|
|
68
|
+
json_dir = json_path.parent
|
|
69
|
+
json_file = os.path.join(json_dir, 'agentprofile.json')
|
|
70
|
+
with open(json_file, 'w', encoding='utf-8') as f:
|
|
71
|
+
json.dump(json_data, f, ensure_ascii=False, indent=2)
|
|
72
|
+
print("智能体描述文件已保存至当前目录下agentprofile.json")
|
|
73
|
+
except Exception as e:
|
|
74
|
+
print(f"文件写入失败: {str(e)}")
|
|
75
|
+
exit(1)
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
if __name__ == "__main__":
|
|
79
|
+
# 创建JSON数据
|
|
80
|
+
# 将加密种子修改为自己的加密种子,可以是随机字符串,也可以是固定字符串,只要保证一致即可。
|
|
81
|
+
acp = agentcp.AgentCP(".", seed_password='')
|
|
82
|
+
agentid_list = acp.get_aid_list()
|
|
83
|
+
agentid:agentcp.AgentID = None
|
|
84
|
+
while agentid is None:
|
|
85
|
+
print("请选择一个身份(aid):")
|
|
86
|
+
for i, agentid in enumerate(agentid_list):
|
|
87
|
+
print(f"{i+1}. {agentid}")
|
|
88
|
+
print(f"{len(agentid_list)+1}. 创建一个新的身份(aid)")
|
|
89
|
+
choice = input("请输入数字选择一个身份(aid): ")
|
|
90
|
+
try:
|
|
91
|
+
choice = int(choice) - 1
|
|
92
|
+
if choice < 0 or choice > len(agentid_list):
|
|
93
|
+
raise ValueError
|
|
94
|
+
if choice == len(agentid_list):
|
|
95
|
+
aid = input("请输入名称: ")
|
|
96
|
+
agentid = acp.create_aid("agentunion.cn",aid)
|
|
97
|
+
if agentid is None:
|
|
98
|
+
print("创建身份(aid)失败,请打开日志查看原因")
|
|
99
|
+
exit(1)
|
|
100
|
+
agentid_list = acp.get_aid_list()
|
|
101
|
+
else:
|
|
102
|
+
agentid = acp.load_aid(agentid_list[choice])
|
|
103
|
+
if agentid is None:
|
|
104
|
+
print("加载身份(aid)失败,请打开日志查看原因")
|
|
105
|
+
exit(1)
|
|
106
|
+
except ValueError:
|
|
107
|
+
print("无效的选择,请重新输入。")
|
|
108
|
+
print(f"当前选择的身份(aid)是: {str(agentid)}")
|
|
109
|
+
agentid.init_ap_client()
|
|
110
|
+
json_data = create_financial_analyzer_json(agentid.get_publisher_info())
|
|
111
|
+
write_agent_profile_json(json_data)
|
|
112
|
+
select_result = input("是否将文件拷贝到agent公有数据目录下(Y/N): ")
|
|
113
|
+
if select_result.upper() != "Y":
|
|
114
|
+
print("程序运行结束")
|
|
115
|
+
exit(1)
|
|
116
|
+
agentid.create_agent_profile(json_data)
|
|
117
|
+
select_result = input("拷贝成功,是否同步到接入服务器(Y/N): ")
|
|
118
|
+
if select_result.upper() != "Y":
|
|
119
|
+
print("程序运行结束")
|
|
120
|
+
exit(1)
|
|
121
|
+
result = agentid.sync_public_files()
|
|
122
|
+
if result:
|
|
123
|
+
print("文件同步成功!")
|
|
124
|
+
else:
|
|
125
|
+
print("文件同步失败,请初始化ACP时打开日志查看")
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import agentcp
|
|
2
|
+
import json
|
|
3
|
+
import time
|
|
4
|
+
tools=[{
|
|
5
|
+
"type": "function",
|
|
6
|
+
"function": {
|
|
7
|
+
"name": "get_weather",
|
|
8
|
+
"description": "Retrieves the current weather report for a specified city",
|
|
9
|
+
"parameters": {
|
|
10
|
+
"type": "object",
|
|
11
|
+
"properties": {
|
|
12
|
+
"city": {
|
|
13
|
+
"type": "string",
|
|
14
|
+
"description": "The name of the city for which to retrieve the weather report"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"required": ["city"]
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}]
|
|
21
|
+
def get_weather(city: str) -> str:
|
|
22
|
+
return f"{city}的天气是晴朗,温度适宜,20~30度"
|
|
23
|
+
|
|
24
|
+
def call_function(name, args):
|
|
25
|
+
if name == "get_weather":
|
|
26
|
+
return get_weather(**args)
|
|
27
|
+
else:
|
|
28
|
+
return f"Function {name} not found"
|
|
29
|
+
|
|
30
|
+
if __name__ == "__main__":
|
|
31
|
+
llm_agent_id = "your_llm_agent_id_from_mu"
|
|
32
|
+
agent_id = 'your_agent_id_from_profile'
|
|
33
|
+
acp = agentcp.AgentCP('.', seed_password='')
|
|
34
|
+
aid = acp.load_aid(agent_id)
|
|
35
|
+
async def reply_message_handler(reply_msg, sender, session_id):
|
|
36
|
+
message_json = json.loads(reply_msg.get("message"))
|
|
37
|
+
if isinstance(message_json, list) and len(message_json) > 0:
|
|
38
|
+
message_json = message_json[0]
|
|
39
|
+
type = message_json.get("type")
|
|
40
|
+
if type == "tool_call":
|
|
41
|
+
tool = json.loads(message_json.get("content"))
|
|
42
|
+
tool_name = tool.get("tool_name")
|
|
43
|
+
tool_args = tool.get("tool_args")
|
|
44
|
+
tool_result = call_function(tool_name, tool_args)
|
|
45
|
+
aid.quick_send_messsage_content(llm_agent_id, tool_result, lambda reply_msg: reply_message_handler(reply_msg, sender, session_id))
|
|
46
|
+
else:
|
|
47
|
+
reply_text = aid.get_content_from_message(reply_msg)
|
|
48
|
+
aid.send_message_content(to_aid_list=[sender], session_id=session_id, llm_content=reply_text)
|
|
49
|
+
|
|
50
|
+
@aid.message_handler()
|
|
51
|
+
async def sync_message_handler(msg):
|
|
52
|
+
receiver = aid.get_receiver_from_message(msg)
|
|
53
|
+
if aid.id not in receiver:
|
|
54
|
+
return
|
|
55
|
+
session_id = aid.get_session_id_from_message(msg)
|
|
56
|
+
sender = aid.get_sender_from_message(msg)
|
|
57
|
+
sender_content = aid.get_content_from_message(msg)
|
|
58
|
+
msg_block = {
|
|
59
|
+
"type": "content",
|
|
60
|
+
"status": "success",
|
|
61
|
+
"timestamp": int(time.time() * 1000),
|
|
62
|
+
"content": sender_content,
|
|
63
|
+
"tools": tools
|
|
64
|
+
}
|
|
65
|
+
aid.quick_send_messsage(llm_agent_id, msg_block, lambda reply_msg: reply_message_handler(reply_msg, sender, session_id))
|
|
66
|
+
return True
|
|
67
|
+
aid.online()
|
|
68
|
+
acp.serve_forever()
|
|
69
|
+
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
## 使用指南
|
|
2
|
+
### 1、环境要求
|
|
3
|
+
- Python 3.8+
|
|
4
|
+
- [AgentCP SDK](https://pypi.org/project/agentcp/)
|
|
5
|
+
|
|
6
|
+
### 2、安装依赖
|
|
7
|
+
|
|
8
|
+
安装必要的Python库:
|
|
9
|
+
```bash
|
|
10
|
+
pip install agentcp
|
|
11
|
+
```
|
|
12
|
+
### 3、创建身份ID
|
|
13
|
+
```bash
|
|
14
|
+
python create_profile.py
|
|
15
|
+
```
|
|
16
|
+
### 4、修改main.py文件
|
|
17
|
+
1. 将seed_password、agent_id修改为上一步创建的身份信息
|
|
18
|
+
2. 将 to_agent_id 修改为你想要调用的[agent_id](https://www.agentunion.cn/)
|
|
19
|
+
|
|
20
|
+
### 5、执行main.py代码
|
|
21
|
+
```bash
|
|
22
|
+
python main.py
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## 功能简介
|
|
26
|
+
该Agent基于`agentcp`库构建,实现了一个天气查询的中转代理 Agent,可接收用户请求并将其转发给下游天气查询 Agent,最终将结果返回用户。
|
|
27
|
+
|
|
28
|
+
- 接收并处理用户的消息请求
|
|
29
|
+
- 转发查询请求到目标Agent
|
|
30
|
+
- 处理目标Agent的响应并返回给原始请求方
|
|
31
|
+
|
|
32
|
+
## 完整示例代码
|
|
33
|
+
```python
|
|
34
|
+
import agentcp
|
|
35
|
+
if __name__ == "__main__":
|
|
36
|
+
to_agent_id = "your_llm_agent_id_from_mu"
|
|
37
|
+
agent_id = 'your_agent_id_from_profile'
|
|
38
|
+
acp = agentcp.AgentCP('.', seed_password='')
|
|
39
|
+
aid = acp.load_aid(agent_id)
|
|
40
|
+
|
|
41
|
+
#其它agent返回消息处理函数
|
|
42
|
+
async def reply_message_handler(reply_msg, sender, session_id):
|
|
43
|
+
reply_text = aid.get_content_from_message(reply_msg)
|
|
44
|
+
aid.send_message_content(to_aid_list=[sender], session_id=session_id, llm_content=reply_text)
|
|
45
|
+
|
|
46
|
+
@aid.message_handler() #消息处理函数
|
|
47
|
+
async def sync_message_handler(msg):
|
|
48
|
+
receiver = aid.get_receiver_from_message(msg) # 获取接收者
|
|
49
|
+
if aid.id not in receiver:
|
|
50
|
+
return
|
|
51
|
+
session_id = aid.get_session_id_from_message(msg)
|
|
52
|
+
sender = aid.get_sender_from_message(msg) # 获取发送者
|
|
53
|
+
sender_content = aid.get_content_from_message(msg)
|
|
54
|
+
aid.quick_send_messsage_content(to_agent_id, sender_content, lambda reply_msg: reply_message_handler(reply_msg, sender, session_id))
|
|
55
|
+
return True
|
|
56
|
+
aid.online()
|
|
57
|
+
acp.serve_forever()
|
|
58
|
+
```
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
from datetime import datetime, timezone
|
|
2
|
+
import agentcp
|
|
3
|
+
from pathlib import Path # 新增导入
|
|
4
|
+
import json
|
|
5
|
+
def create_financial_analyzer_json(publisherInfo):
|
|
6
|
+
"""创建智能体能力、权限描述"""
|
|
7
|
+
profile_json_data = {
|
|
8
|
+
"publisherInfo": publisherInfo,
|
|
9
|
+
"avaUrl": "https://img0.baidu.com/it/u=727206602,4114969606&fm=253&fmt=auto&app=138&f=JPEG?w=285&h=285",
|
|
10
|
+
"version": "1.0.0",
|
|
11
|
+
"lastUpdated": datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ"),
|
|
12
|
+
"name": "通过Agent查询天气",
|
|
13
|
+
"description": "通过其它Agent查询天气",
|
|
14
|
+
"capabilities": {
|
|
15
|
+
"core": ["天气查询"],
|
|
16
|
+
"extended": []
|
|
17
|
+
},
|
|
18
|
+
"llm":{
|
|
19
|
+
"model":"", #模型名称,或使用aid
|
|
20
|
+
"num_parameters":"", #模型参数量(如"7B"表示70亿参数)
|
|
21
|
+
"quantization_bits":"", #量化位数(如Q4表示4位量化)
|
|
22
|
+
"context_length":"", #上下文长度(如"4096"表示4096个token)
|
|
23
|
+
},
|
|
24
|
+
"references": {
|
|
25
|
+
"knowledgeBases": [""],
|
|
26
|
+
"tools": [""],
|
|
27
|
+
"companyInfo": [""],
|
|
28
|
+
"productInfo": [""]
|
|
29
|
+
},
|
|
30
|
+
"authorization": {
|
|
31
|
+
"modes": ["free"],
|
|
32
|
+
"fee": {},
|
|
33
|
+
"description": "当前智能体免费使用,无费用",
|
|
34
|
+
"sla": {}
|
|
35
|
+
},
|
|
36
|
+
"input": {
|
|
37
|
+
"types": ["content"], # 目前支持"content", "search", "reasoning_content", "error", 'file',后续会支持语音视频流
|
|
38
|
+
"formats": ["json"], # 详细类型
|
|
39
|
+
"examples": {
|
|
40
|
+
"type": "content",
|
|
41
|
+
"format": "text",
|
|
42
|
+
"content": "搜索智能体:xxx"
|
|
43
|
+
},
|
|
44
|
+
"semantics": [""],
|
|
45
|
+
"compatibleAids": ["*"]
|
|
46
|
+
},
|
|
47
|
+
"output": {
|
|
48
|
+
"types": ["content"],
|
|
49
|
+
"formats": ["markdown"],
|
|
50
|
+
"examples": {
|
|
51
|
+
"type": "content",
|
|
52
|
+
"format": "markdown",
|
|
53
|
+
"content": ""
|
|
54
|
+
},
|
|
55
|
+
"semantics": [""],
|
|
56
|
+
"compatibleAids": [""]
|
|
57
|
+
},
|
|
58
|
+
"supportStream": True, # False代表当前智能体不支持流式输出
|
|
59
|
+
"supportAsync": True,
|
|
60
|
+
"permission": ["*"]
|
|
61
|
+
}
|
|
62
|
+
return profile_json_data
|
|
63
|
+
|
|
64
|
+
def write_agent_profile_json(json_data):
|
|
65
|
+
try:
|
|
66
|
+
import os
|
|
67
|
+
json_path = Path(__file__).resolve()
|
|
68
|
+
json_dir = json_path.parent
|
|
69
|
+
json_file = os.path.join(json_dir, 'agentprofile.json')
|
|
70
|
+
with open(json_file, 'w', encoding='utf-8') as f:
|
|
71
|
+
json.dump(json_data, f, ensure_ascii=False, indent=2)
|
|
72
|
+
print("智能体描述文件已保存至当前目录下agentprofile.json")
|
|
73
|
+
except Exception as e:
|
|
74
|
+
print(f"文件写入失败: {str(e)}")
|
|
75
|
+
exit(1)
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
if __name__ == "__main__":
|
|
79
|
+
# 创建JSON数据
|
|
80
|
+
# 将加密种子修改为自己的加密种子,可以是随机字符串,也可以是固定字符串,只要保证一致即可。
|
|
81
|
+
acp = agentcp.AgentCP(".", seed_password='')
|
|
82
|
+
agentid_list = acp.get_aid_list()
|
|
83
|
+
agentid:agentcp.AgentID = None
|
|
84
|
+
while agentid is None:
|
|
85
|
+
print("请选择一个身份(aid):")
|
|
86
|
+
for i, agentid in enumerate(agentid_list):
|
|
87
|
+
print(f"{i+1}. {agentid}")
|
|
88
|
+
print(f"{len(agentid_list)+1}. 创建一个新的身份(aid)")
|
|
89
|
+
choice = input("请输入数字选择一个身份(aid): ")
|
|
90
|
+
try:
|
|
91
|
+
choice = int(choice) - 1
|
|
92
|
+
if choice < 0 or choice > len(agentid_list):
|
|
93
|
+
raise ValueError
|
|
94
|
+
if choice == len(agentid_list):
|
|
95
|
+
aid = input("请输入名称: ")
|
|
96
|
+
agentid = acp.create_aid("agentunion.cn",aid)
|
|
97
|
+
if agentid is None:
|
|
98
|
+
print("创建身份(aid)失败,请打开日志查看原因")
|
|
99
|
+
exit(1)
|
|
100
|
+
agentid_list = acp.get_aid_list()
|
|
101
|
+
else:
|
|
102
|
+
agentid = acp.load_aid(agentid_list[choice])
|
|
103
|
+
if agentid is None:
|
|
104
|
+
print("加载身份(aid)失败,请打开日志查看原因")
|
|
105
|
+
exit(1)
|
|
106
|
+
except ValueError:
|
|
107
|
+
print("无效的选择,请重新输入。")
|
|
108
|
+
print(f"当前选择的身份(aid)是: {str(agentid)}")
|
|
109
|
+
agentid.init_ap_client()
|
|
110
|
+
json_data = create_financial_analyzer_json(agentid.get_publisher_info())
|
|
111
|
+
write_agent_profile_json(json_data)
|
|
112
|
+
select_result = input("是否将文件拷贝到agent公有数据目录下(Y/N): ")
|
|
113
|
+
if select_result.upper() != "Y":
|
|
114
|
+
print("程序运行结束")
|
|
115
|
+
exit(1)
|
|
116
|
+
agentid.create_agent_profile(json_data)
|
|
117
|
+
select_result = input("拷贝成功,是否同步到接入服务器(Y/N): ")
|
|
118
|
+
if select_result.upper() != "Y":
|
|
119
|
+
print("程序运行结束")
|
|
120
|
+
exit(1)
|
|
121
|
+
result = agentid.sync_public_files()
|
|
122
|
+
if result:
|
|
123
|
+
print("文件同步成功!")
|
|
124
|
+
else:
|
|
125
|
+
print("文件同步失败,请初始化ACP时打开日志查看")
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import agentcp
|
|
2
|
+
|
|
3
|
+
if __name__ == "__main__":
|
|
4
|
+
to_agent_id = "your_llm_agent_id_from_mu"
|
|
5
|
+
agent_id = 'your_agent_id_from_profile'
|
|
6
|
+
acp = agentcp.AgentCP('.', seed_password='')
|
|
7
|
+
aid = acp.load_aid(agent_id)
|
|
8
|
+
|
|
9
|
+
#其它agent返回消息处理函数
|
|
10
|
+
async def reply_message_handler(reply_msg, sender, session_id):
|
|
11
|
+
reply_text = aid.get_content_from_message(reply_msg)
|
|
12
|
+
aid.send_message_content(to_aid_list=[sender], session_id=session_id, llm_content=reply_text)
|
|
13
|
+
|
|
14
|
+
@aid.message_handler() #消息处理函数
|
|
15
|
+
async def sync_message_handler(msg):
|
|
16
|
+
receiver = aid.get_receiver_from_message(msg) # 获取接收者
|
|
17
|
+
if aid.id not in receiver:
|
|
18
|
+
return
|
|
19
|
+
session_id = aid.get_session_id_from_message(msg)
|
|
20
|
+
sender = aid.get_sender_from_message(msg) # 获取发送者
|
|
21
|
+
sender_content = aid.get_content_from_message(msg)
|
|
22
|
+
aid.quick_send_messsage_content(to_agent_id, sender_content, lambda reply_msg: reply_message_handler(reply_msg, sender, session_id))
|
|
23
|
+
return True
|
|
24
|
+
aid.online()
|
|
25
|
+
acp.serve_forever()
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# github
|
|
2
|
+
[https://github.com/auliwenjiang/agentcp/blob/master/samples/qwen3](https://github.com/auliwenjiang/agentcp/blob/master/samples/qwen3)
|
|
3
|
+
|
|
4
|
+
# README.md
|
|
5
|
+
|
|
6
|
+
## 1、使用指南
|
|
7
|
+
### 1)、创建agent身份
|
|
8
|
+
请参考[一、创建身份,读写公有私有数据](https://ccnz88r91l2y.feishu.cn/wiki/I5F4whGuFioqwNkfJ45c8ZQ3nGf)
|
|
9
|
+
- 运行create_profile.py,创建agent
|
|
10
|
+
|
|
11
|
+
### 2)、添加并配置.env文件
|
|
12
|
+
``` bash
|
|
13
|
+
BASE_URL=https://api.siliconflow.cn/v1 # 改成实际url
|
|
14
|
+
OPENAI_API_KEY=sk-*********** # 改成实际api key
|
|
15
|
+
MODEL_NAME=Qwen/Qwen3-8B # 改成实际大模型
|
|
16
|
+
AID=qwen3demo.agentunion.cn # 改成自己实际注册aid
|
|
17
|
+
```
|
|
18
|
+
### 3)、添加依赖
|
|
19
|
+
``` bash
|
|
20
|
+
pip install openai==1.77.0 -i https://pypi.tuna.tsinghua.edu.cn/simple/
|
|
21
|
+
```
|
|
22
|
+
### 4)、目录结构
|
|
23
|
+
```bash
|
|
24
|
+
.
|
|
25
|
+
├── create_profile.py # agent注册脚本
|
|
26
|
+
├── .env # 环境变量配置
|
|
27
|
+
├── qwen3.py # 智能体实现
|
|
28
|
+
```
|
|
29
|
+
### 5)、执行代码
|
|
30
|
+
```bash
|
|
31
|
+
python qwen3.py
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## 2、功能简介
|
|
35
|
+
基于AgentCP SDK开发的qwen3大模型智能体,实现大模型能力与智能体网络的无缝对接。使网络中的其他智能体可以通过调用该智能体的API来获取大模型的响应。
|
|
36
|
+
|
|
37
|
+
## 3、环境要求
|
|
38
|
+
- Python 3.8+
|
|
39
|
+
- AgentCP SDK
|
|
40
|
+
- OpenAI兼容API服务
|
|
41
|
+
|
|
42
|
+
## 4、核心类说明
|
|
43
|
+
### 1)、agent上线
|
|
44
|
+
```python
|
|
45
|
+
acp = agentcp.AgentCP(os.path.pardir, debug=True)
|
|
46
|
+
print(f"当前acp访问路径:{acp.app_path}\n开始:agentcp版本:{agentcp.__version__},{__file__}")
|
|
47
|
+
aid = acp.load_aid(os.getenv('AID'))
|
|
48
|
+
|
|
49
|
+
# agent上线
|
|
50
|
+
aid.online()
|
|
51
|
+
|
|
52
|
+
# 开启永久监听
|
|
53
|
+
acp.serve_forever()
|
|
54
|
+
```
|
|
55
|
+
### 2)、消息处理(大模型流式响应直接返回)
|
|
56
|
+
```python
|
|
57
|
+
@aid.message_handler()
|
|
58
|
+
async def sync_message_handler(msg):
|
|
59
|
+
# 大模型对话流式响应
|
|
60
|
+
client = OpenAI(api_key=openai_api_key, base_url=base_url)
|
|
61
|
+
messages = [{'role': 'user', 'content': aid.get_content_from_message(msg)}]
|
|
62
|
+
response = client.chat.completions.create(model=model_name, extra_body={'enable_thinking': False}, stream=True, messages=messages)
|
|
63
|
+
# 流式响应
|
|
64
|
+
await aid.send_stream_message(aid.get_session_id_from_message(msg), [aid.get_sender_from_message(msg)], response)
|
|
65
|
+
return True
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## 注意事项
|
|
69
|
+
1. 大模型环境变量正确配置
|
|
70
|
+
2. 智能体网络接入需要有效的seed_password
|
|
71
|
+
3. 生产环境建议关闭debug模式
|