@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.
Files changed (235) hide show
  1. package/CHANGELOG.md +102 -0
  2. package/cli.js +44 -5
  3. package/core/dependency_checker.py +250 -0
  4. package/core/env_checker.py +490 -0
  5. package/dependencies_lock.json +128 -0
  6. package/extensions/agents/assistant/server.py +33 -17
  7. package/extensions/channels/acp_channel/server.py +33 -17
  8. package/extensions/services/backup/entry.py +23 -16
  9. package/extensions/services/evol/auth_manager.py +443 -0
  10. package/extensions/services/evol/config.yaml +149 -0
  11. package/extensions/services/evol/config_loader.py +117 -0
  12. package/extensions/services/evol/entry.py +406 -0
  13. package/extensions/services/evol/evol_api.py +173 -0
  14. package/extensions/services/evol/evol_config.json5 +29 -0
  15. package/extensions/services/evol/migrate_tokens.py +122 -0
  16. package/extensions/services/evol/module.md +32 -0
  17. package/extensions/services/evol/pairing.py +250 -0
  18. package/extensions/services/evol/pairing_codes.jsonl +1 -0
  19. package/extensions/services/evol/relay.py +682 -0
  20. package/extensions/services/evol/relay_config.json5 +67 -0
  21. package/extensions/services/evol/routes/__init__.py +1 -0
  22. package/extensions/services/evol/routes/routes_management_ws.py +127 -0
  23. package/extensions/services/evol/routes/routes_rpc.py +89 -0
  24. package/extensions/services/evol/routes/routes_test.py +61 -0
  25. package/extensions/services/evol/server.py +875 -0
  26. package/extensions/services/evol/static/css/style.css +1200 -0
  27. package/extensions/services/evol/static/index.html +781 -0
  28. package/extensions/services/evol/static/index_evol.html +14 -0
  29. package/extensions/services/evol/static/js/app.js +6304 -0
  30. package/extensions/services/evol/static/js/auth.js +326 -0
  31. package/extensions/services/evol/static/js/dialog.js +285 -0
  32. package/extensions/services/evol/static/js/evol-app-fixed.js +50 -0
  33. package/extensions/services/evol/static/js/evol-app.js +1949 -0
  34. package/extensions/services/evol/static/js/evol-app.js.bak +1800 -0
  35. package/extensions/services/evol/static/js/kernel-client-example.js +228 -0
  36. package/extensions/services/evol/static/js/kernel-client.js +396 -0
  37. package/extensions/services/evol/static/js/main.js +141 -0
  38. package/extensions/services/evol/static/js/registry-tests.js +585 -0
  39. package/extensions/services/evol/static/js/stats.js +217 -0
  40. package/extensions/services/evol/static/js/token-manager.js +175 -0
  41. package/extensions/services/evol/static/pairing.html +248 -0
  42. package/extensions/services/evol/static/test_registry.html +262 -0
  43. package/extensions/services/evol/static/test_relay.html +462 -0
  44. package/extensions/services/evol/stats_manager.py +240 -0
  45. package/extensions/services/model_service/entry.py +23 -1
  46. package/extensions/services/proxy/.claude/settings.local.json +13 -0
  47. package/extensions/services/proxy/CHANGELOG_20260308.md +258 -0
  48. package/extensions/services/proxy/_fix_prints.py +133 -0
  49. package/extensions/services/proxy/_fix_prints2.py +87 -0
  50. package/extensions/services/proxy/agentcp/LICENCE +178 -0
  51. package/extensions/services/proxy/agentcp/README copy.md +85 -0
  52. package/extensions/services/proxy/agentcp/README.md +260 -0
  53. package/extensions/services/proxy/agentcp/__init__.py +16 -0
  54. package/extensions/services/proxy/agentcp/agent.py +4 -0
  55. package/extensions/services/proxy/agentcp/agentcp.py +2494 -0
  56. package/extensions/services/proxy/agentcp/agentprofile.json +89 -0
  57. package/extensions/services/proxy/agentcp/ap/__init__.py +16 -0
  58. package/extensions/services/proxy/agentcp/ap/ap_client.py +316 -0
  59. package/extensions/services/proxy/agentcp/assets/images/wechat_qr.png +0 -0
  60. package/extensions/services/proxy/agentcp/backup/metrics.json +31 -0
  61. package/extensions/services/proxy/agentcp/base/__init__.py +20 -0
  62. package/extensions/services/proxy/agentcp/base/auth_client.py +257 -0
  63. package/extensions/services/proxy/agentcp/base/client.py +112 -0
  64. package/extensions/services/proxy/agentcp/base/env.py +34 -0
  65. package/extensions/services/proxy/agentcp/base/html_util.py +336 -0
  66. package/extensions/services/proxy/agentcp/base/log.py +98 -0
  67. package/extensions/services/proxy/agentcp/ca/__init__.py +17 -0
  68. package/extensions/services/proxy/agentcp/ca/ca_client.py +414 -0
  69. package/extensions/services/proxy/agentcp/ca/ca_root.py +74 -0
  70. package/extensions/services/proxy/agentcp/context/__init__.py +20 -0
  71. package/extensions/services/proxy/agentcp/context/context.py +73 -0
  72. package/extensions/services/proxy/agentcp/context/exceptions.py +114 -0
  73. package/extensions/services/proxy/agentcp/create_profile.py +125 -0
  74. package/extensions/services/proxy/agentcp/create_profile_weather.py +125 -0
  75. package/extensions/services/proxy/agentcp/db/__init__.py +15 -0
  76. package/extensions/services/proxy/agentcp/db/db_mananger.py +550 -0
  77. package/extensions/services/proxy/agentcp/docs/UDP_HEARTBEAT_FIX_REPORT.md +265 -0
  78. package/extensions/services/proxy/agentcp/docs/heartbeat_issue_analysis.md +291 -0
  79. package/extensions/services/proxy/agentcp/file/__init__.py +16 -0
  80. package/extensions/services/proxy/agentcp/file/file_client.py +141 -0
  81. package/extensions/services/proxy/agentcp/file/wss_binary_message.py +137 -0
  82. package/extensions/services/proxy/agentcp/hcp.py +299 -0
  83. package/extensions/services/proxy/agentcp/heartbeat/__init__.py +16 -0
  84. package/extensions/services/proxy/agentcp/heartbeat/heartbeat_client.py +360 -0
  85. package/extensions/services/proxy/agentcp/improved_scheduler.py +498 -0
  86. package/extensions/services/proxy/agentcp/llm_agent_utils.py +249 -0
  87. package/extensions/services/proxy/agentcp/llm_server.py +172 -0
  88. package/extensions/services/proxy/agentcp/mermaid.py +210 -0
  89. package/extensions/services/proxy/agentcp/message.py +149 -0
  90. package/extensions/services/proxy/agentcp/metrics.py +256 -0
  91. package/extensions/services/proxy/agentcp/monitoring/__init__.py +20 -0
  92. package/extensions/services/proxy/agentcp/monitoring/global_monitor.py +27 -0
  93. package/extensions/services/proxy/agentcp/monitoring/metrics_store.py +325 -0
  94. package/extensions/services/proxy/agentcp/monitoring/monitoring_service.py +269 -0
  95. package/extensions/services/proxy/agentcp/monitoring/sliding_window.py +222 -0
  96. package/extensions/services/proxy/agentcp/monitoring/standalone_reader.py +224 -0
  97. package/extensions/services/proxy/agentcp/msg/__init__.py +21 -0
  98. package/extensions/services/proxy/agentcp/msg/connection_manager.py +456 -0
  99. package/extensions/services/proxy/agentcp/msg/message_client.py +2058 -0
  100. package/extensions/services/proxy/agentcp/msg/message_serialize.py +263 -0
  101. package/extensions/services/proxy/agentcp/msg/open_ai_message.py +88 -0
  102. package/extensions/services/proxy/agentcp/msg/session_manager.py +1062 -0
  103. package/extensions/services/proxy/agentcp/msg/stream_client.py +267 -0
  104. package/extensions/services/proxy/agentcp/msg/websocket_file_receiver.py +89 -0
  105. package/extensions/services/proxy/agentcp/msg/ws_logger.py +685 -0
  106. package/extensions/services/proxy/agentcp/msg/wss_binary_message.py +137 -0
  107. package/extensions/services/proxy/agentcp/requirements.txt +7 -0
  108. package/extensions/services/proxy/agentcp/samples/agent_graph/README.md +37 -0
  109. package/extensions/services/proxy/agentcp/samples/agent_graph/agentprofile.json +89 -0
  110. package/extensions/services/proxy/agentcp/samples/agent_graph/create_profile.py +138 -0
  111. package/extensions/services/proxy/agentcp/samples/agent_graph/main.py +164 -0
  112. package/extensions/services/proxy/agentcp/samples/agent_use/create_profile.py +123 -0
  113. package/extensions/services/proxy/agentcp/samples/agent_use/llm/create_profile.py +129 -0
  114. package/extensions/services/proxy/agentcp/samples/agent_use/llm/env.json +5 -0
  115. package/extensions/services/proxy/agentcp/samples/agent_use/llm/main.py +146 -0
  116. package/extensions/services/proxy/agentcp/samples/agent_use/main.py +123 -0
  117. package/extensions/services/proxy/agentcp/samples/agent_use/readme.md +379 -0
  118. package/extensions/services/proxy/agentcp/samples/agent_use/search/create_profile.py +129 -0
  119. package/extensions/services/proxy/agentcp/samples/agent_use/search/main.py +28 -0
  120. package/extensions/services/proxy/agentcp/samples/agent_use/tool/create_profile.py +129 -0
  121. package/extensions/services/proxy/agentcp/samples/agent_use/tool/main.py +20 -0
  122. package/extensions/services/proxy/agentcp/samples/ali_amap/README.md +97 -0
  123. package/extensions/services/proxy/agentcp/samples/ali_amap/amap_agent.py +88 -0
  124. package/extensions/services/proxy/agentcp/samples/ali_amap/create_profile.py +125 -0
  125. package/extensions/services/proxy/agentcp/samples/compute_agent/agent/powershell.py +228 -0
  126. package/extensions/services/proxy/agentcp/samples/compute_agent/agent/software.py +63 -0
  127. package/extensions/services/proxy/agentcp/samples/compute_agent/agent/tools.py +36 -0
  128. package/extensions/services/proxy/agentcp/samples/compute_agent/browser_user.py +41 -0
  129. package/extensions/services/proxy/agentcp/samples/deepseek/README.md +79 -0
  130. package/extensions/services/proxy/agentcp/samples/deepseek/create_profile.py +126 -0
  131. package/extensions/services/proxy/agentcp/samples/deepseek/deepseek.py +42 -0
  132. package/extensions/services/proxy/agentcp/samples/dify_chat/README.md +78 -0
  133. package/extensions/services/proxy/agentcp/samples/dify_chat/create_profile.py +126 -0
  134. package/extensions/services/proxy/agentcp/samples/dify_chat/dify_chat.py +47 -0
  135. package/extensions/services/proxy/agentcp/samples/dify_workflow/README.md +78 -0
  136. package/extensions/services/proxy/agentcp/samples/dify_workflow/create_profile.py +126 -0
  137. package/extensions/services/proxy/agentcp/samples/dify_workflow/dify_workflow.py +46 -0
  138. package/extensions/services/proxy/agentcp/samples/executor/README.md +44 -0
  139. package/extensions/services/proxy/agentcp/samples/executor/agentprofile.json +89 -0
  140. package/extensions/services/proxy/agentcp/samples/executor/create_profile.py +139 -0
  141. package/extensions/services/proxy/agentcp/samples/executor/main.py +160 -0
  142. package/extensions/services/proxy/agentcp/samples/filereader/README.md +45 -0
  143. package/extensions/services/proxy/agentcp/samples/filereader/agentprofile.json +90 -0
  144. package/extensions/services/proxy/agentcp/samples/filereader/create_profile.py +137 -0
  145. package/extensions/services/proxy/agentcp/samples/filereader/main.py +253 -0
  146. package/extensions/services/proxy/agentcp/samples/filewriter/README.md +38 -0
  147. package/extensions/services/proxy/agentcp/samples/filewriter/agentprofile.json +91 -0
  148. package/extensions/services/proxy/agentcp/samples/filewriter/create_profile.py +138 -0
  149. package/extensions/services/proxy/agentcp/samples/filewriter/main.py +289 -0
  150. package/extensions/services/proxy/agentcp/samples/hcp/README.md +85 -0
  151. package/extensions/services/proxy/agentcp/samples/hcp/acp_weather_agent.zip +0 -0
  152. package/extensions/services/proxy/agentcp/samples/hcp/create_profile.py +125 -0
  153. package/extensions/services/proxy/agentcp/samples/hcp/hcp.py +237 -0
  154. package/extensions/services/proxy/agentcp/samples/helloworld/README.md +68 -0
  155. package/extensions/services/proxy/agentcp/samples/helloworld/hello_world.py +40 -0
  156. package/extensions/services/proxy/agentcp/samples/llm_agent/MEADME.md +117 -0
  157. package/extensions/services/proxy/agentcp/samples/llm_agent/create_profile.py +125 -0
  158. package/extensions/services/proxy/agentcp/samples/llm_agent/qwen_agent.py +136 -0
  159. package/extensions/services/proxy/agentcp/samples/local_llm_agent/README.md +90 -0
  160. package/extensions/services/proxy/agentcp/samples/local_llm_agent/create_profile.py +125 -0
  161. package/extensions/services/proxy/agentcp/samples/local_llm_agent/main.py +49 -0
  162. package/extensions/services/proxy/agentcp/samples/query_llm_from_agent/README.md +55 -0
  163. package/extensions/services/proxy/agentcp/samples/query_llm_from_agent/create_profile.py +125 -0
  164. package/extensions/services/proxy/agentcp/samples/query_llm_from_agent/main.py +23 -0
  165. package/extensions/services/proxy/agentcp/samples/query_weather_api_agent/README.md +103 -0
  166. package/extensions/services/proxy/agentcp/samples/query_weather_api_agent/create_profile.py +125 -0
  167. package/extensions/services/proxy/agentcp/samples/query_weather_api_agent/main.py +69 -0
  168. package/extensions/services/proxy/agentcp/samples/query_weather_from_agent/README.md +58 -0
  169. package/extensions/services/proxy/agentcp/samples/query_weather_from_agent/create_profile.py +125 -0
  170. package/extensions/services/proxy/agentcp/samples/query_weather_from_agent/main.py +25 -0
  171. package/extensions/services/proxy/agentcp/samples/qwen3/README.md +71 -0
  172. package/extensions/services/proxy/agentcp/samples/qwen3/create_profile.py +126 -0
  173. package/extensions/services/proxy/agentcp/samples/qwen3/qwen3.py +37 -0
  174. package/extensions/services/proxy/agentcp/samples/qwen3_tools/README.md +133 -0
  175. package/extensions/services/proxy/agentcp/samples/qwen3_tools/create_profile.py +126 -0
  176. package/extensions/services/proxy/agentcp/samples/qwen3_tools/qwen3_tools.py +98 -0
  177. package/extensions/services/proxy/agentcp/samples/search/create_profile_qwen.py +125 -0
  178. package/extensions/services/proxy/agentcp/samples/search/create_profile_search.py +125 -0
  179. package/extensions/services/proxy/agentcp/samples/search/qwen_agent.py +136 -0
  180. package/extensions/services/proxy/agentcp/samples/search/search_agent.py +170 -0
  181. package/extensions/services/proxy/agentcp/samples/wrapper_agently_to_agent/README.md +89 -0
  182. package/extensions/services/proxy/agentcp/samples/wrapper_agently_to_agent/create_profile.py +125 -0
  183. package/extensions/services/proxy/agentcp/samples/wrapper_agently_to_agent/main.py +44 -0
  184. package/extensions/services/proxy/agentcp/utils/__init__.py +15 -0
  185. package/extensions/services/proxy/agentcp/utils/file_util.py +117 -0
  186. package/extensions/services/proxy/agentcp/utils/proxy_bypass.py +99 -0
  187. package/extensions/services/proxy/agentcp/workflow.py +203 -0
  188. package/extensions/services/proxy/console_auth.py +109 -0
  189. package/extensions/services/proxy/evol/__init__.py +1 -0
  190. package/extensions/services/proxy/evol/config.py +37 -0
  191. package/extensions/services/proxy/evol/http/__init__.py +1 -0
  192. package/extensions/services/proxy/evol/http/async_http.py +551 -0
  193. package/extensions/services/proxy/evol/log.py +28 -0
  194. package/extensions/services/proxy/evol/presenter/__init__.py +2 -0
  195. package/extensions/services/proxy/evol/presenter/agentIdPresenter.py +1031 -0
  196. package/extensions/services/proxy/evol/presenter/apikeyPresenter.py +106 -0
  197. package/extensions/services/proxy/evol/presenter/configPresenter.py +1281 -0
  198. package/extensions/services/proxy/evol/presenter/userPresenter.py +477 -0
  199. package/extensions/services/proxy/evol/server/__init__.py +1 -0
  200. package/extensions/services/proxy/evol/server/claude_proxy_async.py +3430 -0
  201. package/extensions/services/proxy/evol/server/openclaw_proxy.py +1861 -0
  202. package/extensions/services/proxy/evol/server/proxy_config.py +15 -0
  203. package/extensions/services/proxy/evol/server/proxy_engine.py +501 -0
  204. package/extensions/services/proxy/evol/version.py +24 -0
  205. package/extensions/services/proxy/logs/websocket.log +260 -0
  206. package/extensions/services/proxy/main.py +240 -0
  207. package/extensions/services/proxy/requirements.txt +13 -0
  208. package/extensions/services/proxy/server.py +271 -0
  209. package/extensions/services/watchdog/entry.py +42 -16
  210. package/extensions/services/watchdog/module.md +1 -0
  211. package/extensions/services/watchdog/monitor.py +34 -4
  212. package/extensions/services/web/module.md +1 -1
  213. package/extensions/services/web/server.py +30 -18
  214. package/extensions/services/web/static/js/token-manager.js +10 -10
  215. package/kernel/entry.py +1 -1
  216. package/kernel/module.md +25 -1
  217. package/kernel/registry_store.py +2 -26
  218. package/kernel/rpc_router.py +36 -10
  219. package/kernel/server.py +106 -17
  220. package/kite_cli/commands/deps_install.py +67 -0
  221. package/kite_cli/commands/env_check.py +45 -0
  222. package/kite_cli/commands/prepare.py +49 -0
  223. package/kite_cli/commands/venv_setup.py +56 -0
  224. package/kite_cli/main.py +29 -1
  225. package/launcher/entry.py +306 -21
  226. package/launcher/module.md +9 -0
  227. package/launcher/module_scanner.py +11 -1
  228. package/main.py +4 -1
  229. package/package.json +8 -1
  230. package/python_version.json +4 -0
  231. package/requirements.txt +38 -0
  232. package/scripts/env-manager.js +328 -0
  233. package/scripts/python-env.js +79 -0
  234. package/scripts/scan_dependencies.py +461 -0
  235. package/scripts/setup-python-env.js +191 -0
@@ -0,0 +1,79 @@
1
+ # github
2
+ [https://github.com/auliwenjiang/agentcp/blob/master/samples/deepseek](https://github.com/auliwenjiang/agentcp/blob/master/samples/deepseek)
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=deepseek-ai/DeepSeek-R1-Distill-Qwen-7B # 改成实际大模型
16
+ AID=deepseekdemo.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
+ ├── deeepseek.py # 智能体实现
28
+ ```
29
+ ### 5)、执行代码
30
+ ```bash
31
+ python deepseek.py
32
+ ```
33
+
34
+ ## 2、功能简介
35
+ 基于AgentCP SDK开发的deepseek大模型智能体,实现大模型能力与智能体网络的无缝对接。使网络中的其他智能体可以通过调用该智能体的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
+ response = llm_chat(query=aid.get_content_from_message(msg))
61
+ # 消息回复
62
+ aid.send_message_content(aid.get_session_id_from_message(msg), [aid.get_sender_from_message(msg)], response)
63
+ return True
64
+ ```
65
+ ### 3)、大模型调用
66
+ ```python
67
+ def llm_chat(query: str) -> str:
68
+ """ 基于openai的大模型调用 """
69
+ client = OpenAI(api_key=openai_api_key, base_url=base_url)
70
+ response = client.chat.completions.create(model=model_name, messages=[{'role': 'user', 'content': query}])
71
+ result = response.choices[0].message.content
72
+ print(f'大模型[{model_name}]回复[query = {query}]:response = {result}')
73
+ return result
74
+ ```
75
+
76
+ ## 注意事项
77
+ 1. 大模型环境变量正确配置
78
+ 2. 智能体网络接入需要有效的seed_password
79
+ 3. 生产环境建议关闭debug模式
@@ -0,0 +1,126 @@
1
+ from datetime import datetime, timezone
2
+ import agentcp
3
+ import os
4
+ from pathlib import Path # 新增导入
5
+ import json
6
+ def create_financial_analyzer_json(publisherInfo):
7
+ """创建智能体能力、权限描述"""
8
+ profile_json_data = {
9
+ "publisherInfo": publisherInfo,
10
+ "avaUrl": "https://resouces.modelscope.cn/avatar/6c8d6d52-b760-4538-9b32-35dd5ebecc68.jpg",
11
+ "version": "1.0.0",
12
+ "lastUpdated": datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ"),
13
+ "name": "deepseek",
14
+ "description": "deepseek大模型对话:输入字符串,输出字符串",
15
+ "capabilities": {
16
+ "core": ["大模型智能体"],
17
+ "extended": []
18
+ },
19
+ "llm":{
20
+ "model":"qwen-plus", #模型名称,或使用aid
21
+ "num_parameters":"", #模型参数量(如"7B"表示70亿参数)
22
+ "quantization_bits":"", #量化位数(如Q4表示4位量化)
23
+ "context_length":"", #上下文长度(如"4096"表示4096个token)
24
+ },
25
+ "references": {
26
+ "knowledgeBases": [""],
27
+ "tools": [""],
28
+ "companyInfo": [""],
29
+ "productInfo": [""]
30
+ },
31
+ "authorization": {
32
+ "modes": ["free"],
33
+ "fee": {},
34
+ "description": "当前智能体免费使用,无费用",
35
+ "sla": {}
36
+ },
37
+ "input": {
38
+ "types": ["content"], # 目前支持"content", "search", "reasoning_content", "error", 'file',后续会支持语音视频流
39
+ "formats": ["json"], # 详细类型
40
+ "examples": {
41
+ "type": "content",
42
+ "format": "text",
43
+ "content": "搜索智能体:xxx"
44
+ },
45
+ "semantics": [""],
46
+ "compatibleAids": ["*"]
47
+ },
48
+ "output": {
49
+ "types": ["content"],
50
+ "formats": ["markdown"],
51
+ "examples": {
52
+ "type": "content",
53
+ "format": "markdown",
54
+ "content": ""
55
+ },
56
+ "semantics": [""],
57
+ "compatibleAids": [""]
58
+ },
59
+ "supportStream": False, # False代表当前智能体不支持流式输出
60
+ "supportAsync": True,
61
+ "permission": ["*"]
62
+ }
63
+ return profile_json_data
64
+
65
+ def write_agent_profile_json(json_data):
66
+ try:
67
+ import os
68
+ json_path = Path(__file__).resolve()
69
+ json_dir = json_path.parent
70
+ json_file = os.path.join(json_dir, 'agentprofile.json')
71
+ with open(json_file, 'w', encoding='utf-8') as f:
72
+ json.dump(json_data, f, ensure_ascii=False, indent=2)
73
+ print("智能体描述文件已保存至当前目录下agentprofile.json")
74
+ except Exception as e:
75
+ print(f"文件写入失败: {str(e)}")
76
+ exit(1)
77
+
78
+
79
+ if __name__ == "__main__":
80
+ # 创建JSON数据
81
+ # 将加密种子修改为自己的加密种子,可以是随机字符串,也可以是固定字符串,只要保证一致即可。
82
+ acp = agentcp.AgentCP(os.path.pardir ,seed_password="123456",debug=False)
83
+ agentid_list = acp.get_aid_list()
84
+ agentid:agentcp.AgentID = None
85
+ while agentid is None:
86
+ print("请选择一个身份(aid):")
87
+ for i, agentid in enumerate(agentid_list):
88
+ print(f"{i+1}. {agentid}")
89
+ print(f"{len(agentid_list)+1}. 创建一个新的身份(aid)")
90
+ choice = input("请输入数字选择一个身份(aid): ")
91
+ try:
92
+ choice = int(choice) - 1
93
+ if choice < 0 or choice > len(agentid_list):
94
+ raise ValueError
95
+ if choice == len(agentid_list):
96
+ aid = input("请输入名称: ")
97
+ agentid = acp.create_aid("agentunion.cn",aid)
98
+ if agentid is None:
99
+ print("创建身份(aid)失败,请打开日志查看原因")
100
+ exit(1)
101
+ agentid_list = acp.get_aid_list()
102
+ else:
103
+ agentid = acp.load_aid(agentid_list[choice])
104
+ if agentid is None:
105
+ print("加载身份(aid)失败,请打开日志查看原因")
106
+ exit(1)
107
+ except ValueError:
108
+ print("无效的选择,请重新输入。")
109
+ print(f"当前选择的身份(aid)是: {str(agentid)}")
110
+ agentid.init_ap_client()
111
+ json_data = create_financial_analyzer_json(agentid.get_publisher_info())
112
+ write_agent_profile_json(json_data)
113
+ select_result = input("是否将文件拷贝到agent公有数据目录下(Y/N): ")
114
+ if select_result.upper() != "Y":
115
+ print("程序运行结束")
116
+ exit(1)
117
+ agentid.create_agent_profile(json_data)
118
+ select_result = input("拷贝成功,是否同步到接入服务器(Y/N): ")
119
+ if select_result.upper() != "Y":
120
+ print("程序运行结束")
121
+ exit(1)
122
+ result = agentid.sync_public_files()
123
+ if result:
124
+ print("文件同步成功!")
125
+ else:
126
+ print("文件同步失败,请初始化ACP时打开日志查看")
@@ -0,0 +1,42 @@
1
+ # -*- coding:utf-8 -*-
2
+ """
3
+ deepseek大模型对话:输入字符串,输出字符串
4
+ https://resouces.modelscope.cn/avatar/6c8d6d52-b760-4538-9b32-35dd5ebecc68.jpg
5
+ """
6
+ import agentcp
7
+ import os
8
+ from openai import OpenAI
9
+ from dotenv import load_dotenv, find_dotenv
10
+
11
+ # 加载并读取环境变量
12
+ load_dotenv(find_dotenv())
13
+ base_url = os.getenv('BASE_URL')
14
+ openai_api_key = os.getenv('OPENAI_API_KEY')
15
+ model_name = os.getenv('MODEL_NAME')
16
+
17
+ def llm_chat(query: str) -> str:
18
+ """ 基于openai的大模型调用 """
19
+ client = OpenAI(api_key=openai_api_key, base_url=base_url)
20
+ response = client.chat.completions.create(model=model_name, messages=[{'role': 'user', 'content': query}])
21
+ result = response.choices[0].message.content
22
+ print(f'大模型[{model_name}]回复[query = {query}]:response = {result}')
23
+ return result
24
+
25
+ if __name__ == "__main__":
26
+ acp = agentcp.AgentCP(os.path.pardir, seed_password='123456', debug=True)
27
+ print(f"当前acp访问路径:{acp.app_path}\n开始:agentcp版本:{agentcp.__version__},{__file__}")
28
+ aid = acp.load_aid(os.getenv('AID'))
29
+
30
+ @aid.message_handler()
31
+ async def sync_message_handler(msg):
32
+ # 大模型对话
33
+ response = llm_chat(query=aid.get_content_from_message(msg))
34
+ # 消息回复
35
+ aid.send_message_content(aid.get_session_id_from_message(msg), [aid.get_sender_from_message(msg)], response)
36
+ return True
37
+
38
+ # agent上线
39
+ aid.online()
40
+
41
+ # 开启永久监听
42
+ acp.serve_forever()
@@ -0,0 +1,78 @@
1
+ # github
2
+ [https://github.com/auliwenjiang/agentcp/blob/master/samples/dify_chat](https://github.com/auliwenjiang/agentcp/blob/master/samples/dify_chat)
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=http://your_host/v1/chat-messages # 改成实际url
14
+ API_KEY=app-1qMAqDifpRiOsnNR7mYOM3uv # 改成实际api key
15
+ AID=difychatdemo.agentunion.cn # 改成自己实际注册aid
16
+ ```
17
+
18
+ ### 3)、目录结构
19
+ ```bash
20
+ .
21
+ ├── create_profile.py # agent注册脚本
22
+ ├── .env # 环境变量配置
23
+ ├── dify_chat.py # 智能体实现
24
+ ```
25
+ ### 4)、执行代码
26
+ ```bash
27
+ python dify_chat.py
28
+ ```
29
+
30
+ ## 2、功能简介
31
+ 基于AgentCP SDK开发的dify chat智能体,实现dify chat能力与智能体网络的无缝对接。使网络中的其他智能体可以通过调用该智能体的API来获取dify chat的响应。
32
+
33
+ ## 3、环境要求
34
+ - Python 3.8+
35
+ - AgentCP SDK
36
+
37
+ ## 4、核心类说明
38
+ ### 1)、agent上线
39
+ ```python
40
+ acp = agentcp.AgentCP(os.path.pardir, debug=True)
41
+ print(f"当前acp访问路径:{acp.app_path}\n开始:agentcp版本:{agentcp.__version__},{__file__}")
42
+ aid = acp.load_aid(os.getenv('AID'))
43
+
44
+ # agent上线
45
+ aid.online()
46
+
47
+ # 开启永久监听
48
+ acp.serve_forever()
49
+ ```
50
+ ### 2)、消息处理
51
+ ```python
52
+ @aid.message_handler()
53
+ async def sync_message_handler(msg):
54
+ # 大模型对话
55
+ response = dify_chat_client(query=aid.get_content_from_message(msg))
56
+ # 消息回复
57
+ aid.send_message_content(aid.get_session_id_from_message(msg), [aid.get_sender_from_message(msg)], response)
58
+ return True
59
+ ```
60
+ ### 3)、dify调用
61
+ ```python
62
+ def dify_chat_client(query: str)-> str:
63
+ """ dify chat 客户端"""
64
+ headers = { 'Authorization': f'Bearer {api_key}', 'Content-Type': 'application/json; charset=utf-8'}
65
+ data = json.dumps({'inputs': {} ,'query': query, 'conversation_id': '', 'user': os.getenv('AID')}, ensure_ascii=False).encode('utf-8')
66
+ response = requests.post(base_url, headers=headers, data=data, stream=False)
67
+ print(f'dify response = {response}')
68
+ if response.status_code != 200:
69
+ return f'请求失败:{response.text}'
70
+ result = json.loads(response.text)['answer']
71
+ print(f'difychat回复[query = {query}]:response = {result}')
72
+ return result
73
+ ```
74
+
75
+ ## 注意事项
76
+ 1. dify环境变量正确配置
77
+ 2. 智能体网络接入需要有效的seed_password
78
+ 3. 生产环境建议关闭debug模式
@@ -0,0 +1,126 @@
1
+ from datetime import datetime, timezone
2
+ import agentcp
3
+ import os
4
+ from pathlib import Path # 新增导入
5
+ import json
6
+ def create_financial_analyzer_json(publisherInfo):
7
+ """创建智能体能力、权限描述"""
8
+ profile_json_data = {
9
+ "publisherInfo": publisherInfo,
10
+ "avaUrl": "https://tse3-mm.cn.bing.net/th/id/OIP-C.Hux_MNYiHtMI5EnBzSIubAAAAA?rs=1&pid=ImgDetMain",
11
+ "version": "1.0.0",
12
+ "lastUpdated": datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ"),
13
+ "name": "deepseek",
14
+ "description": "SSE模式接入dify的chat:输入字符串,输出字符串",
15
+ "capabilities": {
16
+ "core": ["dify chat 智能体"],
17
+ "extended": []
18
+ },
19
+ "llm":{
20
+ "model":"qwen-plus", #模型名称,或使用aid
21
+ "num_parameters":"", #模型参数量(如"7B"表示70亿参数)
22
+ "quantization_bits":"", #量化位数(如Q4表示4位量化)
23
+ "context_length":"", #上下文长度(如"4096"表示4096个token)
24
+ },
25
+ "references": {
26
+ "knowledgeBases": [""],
27
+ "tools": [""],
28
+ "companyInfo": [""],
29
+ "productInfo": [""]
30
+ },
31
+ "authorization": {
32
+ "modes": ["free"],
33
+ "fee": {},
34
+ "description": "当前智能体免费使用,无费用",
35
+ "sla": {}
36
+ },
37
+ "input": {
38
+ "types": ["content"], # 目前支持"content", "search", "reasoning_content", "error", 'file',后续会支持语音视频流
39
+ "formats": ["json"], # 详细类型
40
+ "examples": {
41
+ "type": "content",
42
+ "format": "text",
43
+ "content": "搜索智能体:xxx"
44
+ },
45
+ "semantics": [""],
46
+ "compatibleAids": ["*"]
47
+ },
48
+ "output": {
49
+ "types": ["content"],
50
+ "formats": ["markdown"],
51
+ "examples": {
52
+ "type": "content",
53
+ "format": "markdown",
54
+ "content": ""
55
+ },
56
+ "semantics": [""],
57
+ "compatibleAids": [""]
58
+ },
59
+ "supportStream": False, # False代表当前智能体不支持流式输出
60
+ "supportAsync": True,
61
+ "permission": ["*"]
62
+ }
63
+ return profile_json_data
64
+
65
+ def write_agent_profile_json(json_data):
66
+ try:
67
+ import os
68
+ json_path = Path(__file__).resolve()
69
+ json_dir = json_path.parent
70
+ json_file = os.path.join(json_dir, 'agentprofile.json')
71
+ with open(json_file, 'w', encoding='utf-8') as f:
72
+ json.dump(json_data, f, ensure_ascii=False, indent=2)
73
+ print("智能体描述文件已保存至当前目录下agentprofile.json")
74
+ except Exception as e:
75
+ print(f"文件写入失败: {str(e)}")
76
+ exit(1)
77
+
78
+
79
+ if __name__ == "__main__":
80
+ # 创建JSON数据
81
+ # 将加密种子修改为自己的加密种子,可以是随机字符串,也可以是固定字符串,只要保证一致即可。
82
+ acp = agentcp.AgentCP(os.path.pardir ,seed_password="123456",debug=False)
83
+ agentid_list = acp.get_aid_list()
84
+ agentid:agentcp.AgentID = None
85
+ while agentid is None:
86
+ print("请选择一个身份(aid):")
87
+ for i, agentid in enumerate(agentid_list):
88
+ print(f"{i+1}. {agentid}")
89
+ print(f"{len(agentid_list)+1}. 创建一个新的身份(aid)")
90
+ choice = input("请输入数字选择一个身份(aid): ")
91
+ try:
92
+ choice = int(choice) - 1
93
+ if choice < 0 or choice > len(agentid_list):
94
+ raise ValueError
95
+ if choice == len(agentid_list):
96
+ aid = input("请输入名称: ")
97
+ agentid = acp.create_aid("agentunion.cn",aid)
98
+ if agentid is None:
99
+ print("创建身份(aid)失败,请打开日志查看原因")
100
+ exit(1)
101
+ agentid_list = acp.get_aid_list()
102
+ else:
103
+ agentid = acp.load_aid(agentid_list[choice])
104
+ if agentid is None:
105
+ print("加载身份(aid)失败,请打开日志查看原因")
106
+ exit(1)
107
+ except ValueError:
108
+ print("无效的选择,请重新输入。")
109
+ print(f"当前选择的身份(aid)是: {str(agentid)}")
110
+ agentid.init_ap_client()
111
+ json_data = create_financial_analyzer_json(agentid.get_publisher_info())
112
+ write_agent_profile_json(json_data)
113
+ select_result = input("是否将文件拷贝到agent公有数据目录下(Y/N): ")
114
+ if select_result.upper() != "Y":
115
+ print("程序运行结束")
116
+ exit(1)
117
+ agentid.create_agent_profile(json_data)
118
+ select_result = input("拷贝成功,是否同步到接入服务器(Y/N): ")
119
+ if select_result.upper() != "Y":
120
+ print("程序运行结束")
121
+ exit(1)
122
+ result = agentid.sync_public_files()
123
+ if result:
124
+ print("文件同步成功!")
125
+ else:
126
+ print("文件同步失败,请初始化ACP时打开日志查看")
@@ -0,0 +1,47 @@
1
+ # -*- coding:utf-8 -*-
2
+ """
3
+ 基础配置:
4
+ SSE模式接入dify的chat:输入字符串,输出字符串
5
+ https://tse3-mm.cn.bing.net/th/id/OIP-C.Hux_MNYiHtMI5EnBzSIubAAAAA?rs=1&pid=ImgDetMain
6
+ """
7
+ import agentcp
8
+ import os
9
+ import json
10
+ import requests
11
+ from dotenv import load_dotenv, find_dotenv
12
+
13
+ # 加载并读取环境变量
14
+ load_dotenv(find_dotenv())
15
+ base_url = os.getenv('BASE_URL')
16
+ api_key = os.getenv('API_KEY')
17
+
18
+
19
+ def dify_chat_client(query: str)-> str:
20
+ """ dify chat 客户端"""
21
+ headers = { 'Authorization': f'Bearer {api_key}', 'Content-Type': 'application/json; charset=utf-8'}
22
+ data = json.dumps({'inputs': {} ,'query': query, 'conversation_id': '', 'user': os.getenv('AID')}, ensure_ascii=False).encode('utf-8')
23
+ response = requests.post(base_url, headers=headers, data=data, stream=False)
24
+ print(f'dify response = {response}')
25
+ if response.status_code != 200:
26
+ return f'请求失败:{response.text}'
27
+ result = json.loads(response.text)['answer']
28
+ print(f'difychat回复[query = {query}]:response = {result}')
29
+ return result
30
+
31
+ if __name__ == "__main__":
32
+ acp = agentcp.AgentCP(os.path.pardir, seed_password='123456', debug=True)
33
+ print(f"当前acp访问路径:{acp.app_path}\n开始:agentcp版本:{agentcp.__version__},{__file__}")
34
+ aid = acp.load_aid(os.getenv('AID'))
35
+
36
+ @aid.message_handler()
37
+ async def sync_message_handler(msg):
38
+ # 大模型对话
39
+ response = dify_chat_client(query=aid.get_content_from_message(msg))
40
+ # 消息回复
41
+ aid.send_message_content(aid.get_session_id_from_message(msg), [aid.get_sender_from_message(msg)], response)
42
+ return True
43
+
44
+ # agent上线
45
+ aid.online()
46
+ # 开启永久监听
47
+ acp.serve_forever()
@@ -0,0 +1,78 @@
1
+ # github
2
+ [https://github.com/auliwenjiang/agentcp/blob/master/samples/dify_workflow](https://github.com/auliwenjiang/agentcp/blob/master/samples/dify_workflow)
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=http://your_host/v1/workflows/run # 改成实际url
14
+ API_KEY=app-1qMAqDifpRiOsnNR7mYOM3uv # 改成实际api key
15
+ AID=difyworkflowdemo.agentunion.cn # 改成自己实际注册aid
16
+ ```
17
+
18
+ ### 3)、目录结构
19
+ ```bash
20
+ .
21
+ ├── create_profile.py # agent注册脚本
22
+ ├── .env # 环境变量配置
23
+ ├── dify_workflow.py # 智能体实现
24
+ ```
25
+ ### 4)、执行代码
26
+ ```bash
27
+ python dify_workflow.py
28
+ ```
29
+
30
+ ## 2、功能简介
31
+ 基于AgentCP SDK开发的dify workflow智能体,实现dify workflow能力与智能体网络的无缝对接。使网络中的其他智能体可以通过调用该智能体的API来获取dify workflow的响应。
32
+
33
+ ## 3、环境要求
34
+ - Python 3.8+
35
+ - AgentCP SDK
36
+
37
+ ## 4、核心类说明
38
+ ### 1)、agent上线
39
+ ```python
40
+ acp = agentcp.AgentCP(os.path.pardir, debug=True)
41
+ print(f"当前acp访问路径:{acp.app_path}\n开始:agentcp版本:{agentcp.__version__},{__file__}")
42
+ aid = acp.load_aid(os.getenv('AID'))
43
+
44
+ # agent上线
45
+ aid.online()
46
+
47
+ # 开启永久监听
48
+ acp.serve_forever()
49
+ ```
50
+ ### 2)、消息处理
51
+ ```python
52
+ @aid.message_handler()
53
+ async def sync_message_handler(msg):
54
+ # 大模型对话
55
+ response = dify_workflow_client(query=aid.get_content_from_message(msg))
56
+ # 消息回复
57
+ aid.send_message_content(aid.get_session_id_from_message(msg), [aid.get_sender_from_message(msg)], response)
58
+ return True
59
+ ```
60
+ ### 3)、dify调用
61
+ ```python
62
+ def dify_workflow_client(query: str)-> str:
63
+ """ dify工作流客户端"""
64
+ headers = { 'Authorization': f'Bearer {api_key}', 'Content-Type': 'application/json; charset=utf-8'}
65
+ data = json.dumps({'inputs': {'query':query}, 'conversation_id': '', 'user': os.getenv('AID')}, ensure_ascii=False).encode('utf-8')
66
+ response = requests.post(base_url, headers=headers, data=data, stream=False)
67
+ print(f'dify response = {response}')
68
+ if response.status_code != 200:
69
+ return f'请求失败:{response.text}'
70
+ result = json.loads(response.text)['data']['outputs']['text']
71
+ print(f'difyworkflow回复[query = {query}]:response = {result}')
72
+ return result
73
+ ```
74
+
75
+ ## 注意事项
76
+ 1. dify环境变量正确配置
77
+ 2. 智能体网络接入需要有效的seed_password
78
+ 3. 生产环境建议关闭debug模式