internal_tool.sql 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. INSERT INTO tool (create_time, update_time, id, name, label, "desc", code, input_field_list, init_field_list, icon, is_active, scope, tool_type, template_id, workspace_id, init_params, user_id, folder_id) VALUES ('2025-03-10 06:20:35.945414 +00:00', '2025-03-10 09:19:23.608026 +00:00', 'c75cb48e-fd77-11ef-84d2-5618c4394482', '博查搜索', 'web_search', '从博查搜索任何信息和网页URL', e'def bocha_search(query, apikey):
  2. import requests
  3. import json
  4. url = "https://api.bochaai.com/v1/web-search"
  5. payload = json.dumps({
  6. "query": query,
  7. "summary": True,
  8. "count": 8
  9. })
  10. headers = {
  11. "Authorization": "Bearer " + apikey, #鉴权参数,示例:Bearer xxxxxx,API KEY请先前往博查AI开放平台(https://open.bochaai.com)> API KEY 管理中获取。
  12. "Content-Type": "application/json"
  13. }
  14. response = requests.request("POST", url, headers=headers, data=payload)
  15. if response.status_code == 200:
  16. return response.json()
  17. else:
  18. raise Exception(f"API请求失败: {response.status_code}, 错误信息: {response.text}")
  19. return (response.text)', '[{"name": "query", "type": "string", "source": "reference", "is_required": true}]', '[{"attrs": {"type": "password", "maxlength": 200, "minlength": 1, "show-password": true, "show-word-limit": true}, "field": "apikey", "label": "API Key", "required": true, "input_type": "PasswordInput", "props_info": {"rules": [{"message": "API Key 为必填属性", "required": true}, {"max": 200, "min": 1, "message": "API Key 长度在 1 到 200 个字符", "trigger": "blur"}]}, "default_value": "x", "show_default_value": false}]', './tool/bochaai/icon.png', true, 'INTERNAL', 'INTERNAL', null, 'None', '', 'f0dd8f71-e4ee-11ee-8c84-a8a1595801ab', 'default');
  20. INSERT INTO tool (create_time, update_time, id, name, label, "desc", code, input_field_list, init_field_list, icon, is_active, scope, tool_type, template_id, workspace_id, init_params, user_id, folder_id) VALUES ('2025-02-26 03:36:48.187286 +00:00', '2025-03-11 07:23:46.123972 +00:00', 'e89ad2ae-f3f2-11ef-ad09-0242ac110002', 'Google Search','web_search', 'Google Web Search', e'def google_search(query, apikey, cx):
  21. import requests
  22. import json
  23. url = "https://customsearch.googleapis.com/customsearch/v1"
  24. params = {
  25. "q": query,
  26. "key": apikey,
  27. "cx": cx,
  28. "num": 10, # 每次最多返回10条
  29. }
  30. response = requests.get(url, params=params)
  31. if response.status_code == 200:
  32. return response.json()
  33. else:
  34. raise Exception(f"API请求失败: {response.status_code}, 错误信息: {response.text}")
  35. return (response.text)', '[{"name": "query", "type": "string", "source": "reference", "is_required": true}]', '[{"attrs": {"type": "password", "maxlength": 200, "minlength": 1, "show-password": true, "show-word-limit": true}, "field": "apikey", "label": "API Key", "required": true, "input_type": "PasswordInput", "props_info": {"rules": [{"message": "API Key 为必填属性", "required": true}, {"max": 200, "min": 1, "message": "API Key 长度在 1 到 200 个字符", "trigger": "blur"}]}, "default_value": "x", "show_default_value": false}, {"attrs": {"maxlength": 200, "minlength": 1, "show-word-limit": true}, "field": "cx", "label": "cx", "required": true, "input_type": "TextInput", "props_info": {"rules": [{"message": "cx 为必填属性", "required": true}, {"max": 200, "min": 1, "message": "cx长度在 1 到 200 个字符", "trigger": "blur"}]}, "default_value": "x", "show_default_value": false}]', './tool/google_search/icon.png', true, 'INTERNAL', 'INTERNAL', null, 'None', '', 'f0dd8f71-e4ee-11ee-8c84-a8a1595801ab', 'default');
  36. INSERT INTO tool (create_time, update_time, id, name, label, "desc", code, input_field_list, init_field_list, icon, is_active, scope, tool_type, template_id, workspace_id, init_params, user_id, folder_id) VALUES ('2025-02-25 07:44:40.141515 +00:00', '2025-03-11 06:33:53.248495 +00:00', '5e912f00-f34c-11ef-8a9c-5618c4394482', 'LangSearch','web_search', e'A Web Search tool supporting natural language search
  37. ', e'
  38. def langsearch(query, apikey):
  39. import json
  40. import requests
  41. url = "https://api.langsearch.com/v1/web-search"
  42. payload = json.dumps({
  43. "query": query,
  44. "summary": True,
  45. "freshness": "noLimit",
  46. "livecrawl": True,
  47. "count": 20
  48. })
  49. headers = {
  50. "Authorization": apikey,
  51. "Content-Type": "application/json"
  52. }
  53. # key从官网申请 https://langsearch.com/
  54. response = requests.request("POST", url, headers=headers, data=payload)
  55. if response.status_code == 200:
  56. return response.json()
  57. else:
  58. raise Exception(f"API请求失败: {response.status_code}, 错误信息: {response.text}")
  59. return (response.text)', '[{"name": "query", "type": "string", "source": "reference", "is_required": true}]', '[{"attrs": {"type": "password", "maxlength": 200, "minlength": 1, "show-password": true, "show-word-limit": true}, "field": "apikey", "label": "API Key", "required": true, "input_type": "PasswordInput", "props_info": {"rules": [{"message": "API Key 为必填属性", "required": true}, {"max": 200, "min": 1, "message": "API Key 长度在 1 到 200 个字符", "trigger": "blur"}]}, "default_value": "x", "show_default_value": false}]', './tool/langsearch/icon.png', true, 'INTERNAL', 'INTERNAL', null, 'None', '', 'f0dd8f71-e4ee-11ee-8c84-a8a1595801ab', 'default');
  60. INSERT INTO tool (create_time, update_time, id, name, label, "desc", code, input_field_list, init_field_list, icon, is_active, scope, tool_type, template_id, workspace_id, init_params, user_id, folder_id) VALUES ('2025-03-17 08:16:32.626245 +00:00', '2025-03-17 08:16:32.626308 +00:00', '22c21b76-0308-11f0-9694-5618c4394482', 'MySQL 查询','database_search', '一个连接MySQL数据库执行SQL查询的工具', e'
  61. def query_mysql(host,port, user, password, database, sql):
  62. import pymysql
  63. import json
  64. from pymysql.cursors import DictCursor
  65. from datetime import datetime, date
  66. def default_serializer(obj):
  67. from decimal import Decimal
  68. if isinstance(obj, (datetime, date)):
  69. return obj.isoformat() # 将 datetime/date 转换为 ISO 格式字符串
  70. elif isinstance(obj, Decimal):
  71. return float(obj) # 将 Decimal 转换为 float
  72. raise TypeError(f"Type {type(obj)} not serializable")
  73. try:
  74. # 创建连接
  75. db = pymysql.connect(
  76. host=host,
  77. port=int(port),
  78. user=user,
  79. password=password,
  80. database=database,
  81. cursorclass=DictCursor # 使用字典游标
  82. )
  83. # 使用 cursor() 方法创建一个游标对象 cursor
  84. cursor = db.cursor()
  85. # 使用 execute() 方法执行 SQL 查询
  86. cursor.execute(sql)
  87. # 使用 fetchall() 方法获取所有数据
  88. data = cursor.fetchall()
  89. # 处理 bytes 类型的数据
  90. for row in data:
  91. for key, value in row.items():
  92. if isinstance(value, bytes):
  93. row[key] = value.decode("utf-8") # 转换为字符串
  94. # 将数据序列化为 JSON
  95. json_data = json.dumps(data, default=default_serializer, ensure_ascii=False)
  96. return json_data
  97. # 关闭数据库连接
  98. db.close()
  99. except Exception as e:
  100. print(f"Error while connecting to MySQL: {e}")
  101. raise e', '[{"name": "sql", "type": "string", "source": "reference", "is_required": true}]', '[{"attrs": {"maxlength": 200, "minlength": 1, "show-word-limit": true}, "field": "host", "label": "host", "required": true, "input_type": "TextInput", "props_info": {"rules": [{"message": "host 为必填属性", "required": true}, {"max": 200, "min": 1, "message": "host长度在 1 到 200 个字符", "trigger": "blur"}]}, "default_value": "x", "show_default_value": false}, {"attrs": {"maxlength": 20, "minlength": 1, "show-word-limit": true}, "field": "port", "label": "port", "required": true, "input_type": "TextInput", "props_info": {"rules": [{"message": "port 为必填属性", "required": true}, {"max": 20, "min": 1, "message": "port长度在 1 到 20 个字符", "trigger": "blur"}]}, "default_value": "3306", "show_default_value": false}, {"attrs": {"maxlength": 200, "minlength": 1, "show-word-limit": true}, "field": "user", "label": "user", "required": true, "input_type": "TextInput", "props_info": {"rules": [{"message": "user 为必填属性", "required": true}, {"max": 200, "min": 1, "message": "user长度在 1 到 200 个字符", "trigger": "blur"}]}, "default_value": "root", "show_default_value": false}, {"attrs": {"type": "password", "maxlength": 200, "minlength": 1, "show-password": true, "show-word-limit": true}, "field": "password", "label": "password", "required": true, "input_type": "PasswordInput", "props_info": {"rules": [{"message": "password 为必填属性", "required": true}, {"max": 200, "min": 1, "message": "password长度在 1 到 200 个字符", "trigger": "blur"}]}, "default_value": "x", "show_default_value": false}, {"attrs": {"maxlength": 200, "minlength": 1, "show-word-limit": true}, "field": "database", "label": "database", "required": true, "input_type": "TextInput", "props_info": {"rules": [{"message": "database 为必填属性", "required": true}, {"max": 200, "min": 1, "message": "database长度在 1 到 200 个字符", "trigger": "blur"}]}, "default_value": "x", "show_default_value": false}]', './tool/mysql/icon.png', true, 'INTERNAL', 'INTERNAL', null, 'None', null, 'f0dd8f71-e4ee-11ee-8c84-a8a1595801ab', 'default');
  102. INSERT INTO tool (create_time, update_time, id, name, label, "desc", code, input_field_list, init_field_list, icon, is_active, scope, tool_type, template_id, workspace_id, init_params, user_id, folder_id) VALUES ('2025-03-17 07:37:54.620836 +00:00', '2025-03-17 07:37:54.620887 +00:00', 'bd1e8b88-0302-11f0-87bb-5618c4394482', 'PostgreSQL 查询','database_search', '一个连接PostgreSQL数据库执行SQL查询的工具', e'
  103. def queryPgSQL(database, user, password, host, port, query):
  104. import psycopg2
  105. import json
  106. from datetime import datetime
  107. # 自定义 JSON 序列化函数
  108. def default_serializer(obj):
  109. from decimal import Decimal
  110. if isinstance(obj, datetime):
  111. return obj.isoformat() # 将 datetime 转换为 ISO 格式字符串
  112. elif isinstance(obj, Decimal):
  113. return float(obj) # 将 Decimal 转换为 float
  114. raise TypeError(f"Type {type(obj)} not serializable")
  115. # 数据库连接信息
  116. conn_params = {
  117. "dbname": database,
  118. "user": user,
  119. "password": password,
  120. "host": host,
  121. "port": port
  122. }
  123. try:
  124. # 建立连接
  125. conn = psycopg2.connect(**conn_params)
  126. print("连接成功!")
  127. # 创建游标对象
  128. cursor = conn.cursor()
  129. # 执行查询语句
  130. cursor.execute(query)
  131. # 获取查询结果
  132. rows = cursor.fetchall()
  133. # 处理 bytes 类型的数据
  134. columns = [desc[0] for desc in cursor.description]
  135. result = [dict(zip(columns, row)) for row in rows]
  136. # 转换为 JSON 格式
  137. json_result = json.dumps(result, default=default_serializer, ensure_ascii=False)
  138. return json_result
  139. except Exception as e:
  140. print(f"发生错误:{e}")
  141. raise e
  142. finally:
  143. # 关闭游标和连接
  144. if cursor:
  145. cursor.close()
  146. if conn:
  147. conn.close()', '[{"name": "query", "type": "string", "source": "reference", "is_required": true}]', '[{"attrs": {"maxlength": 200, "minlength": 1, "show-word-limit": true}, "field": "host", "label": "host", "required": true, "input_type": "TextInput", "props_info": {"rules": [{"message": "host 为必填属性", "required": true}, {"max": 200, "min": 1, "message": "host长度在 1 到 200 个字符", "trigger": "blur"}]}, "default_value": "x", "show_default_value": false}, {"attrs": {"maxlength": 20, "minlength": 1, "show-word-limit": true}, "field": "port", "label": "port", "required": true, "input_type": "TextInput", "props_info": {"rules": [{"message": "port 为必填属性", "required": true}, {"max": 20, "min": 1, "message": "port长度在 1 到 20 个字符", "trigger": "blur"}]}, "default_value": "5432", "show_default_value": false}, {"attrs": {"maxlength": 200, "minlength": 1, "show-word-limit": true}, "field": "user", "label": "user", "required": true, "input_type": "TextInput", "props_info": {"rules": [{"message": "user 为必填属性", "required": true}, {"max": 200, "min": 1, "message": "user长度在 1 到 200 个字符", "trigger": "blur"}]}, "default_value": "root", "show_default_value": false}, {"attrs": {"type": "password", "maxlength": 200, "minlength": 1, "show-password": true, "show-word-limit": true}, "field": "password", "label": "password", "required": true, "input_type": "PasswordInput", "props_info": {"rules": [{"message": "password 为必填属性", "required": true}, {"max": 200, "min": 1, "message": "password长度在 1 到 200 个字符", "trigger": "blur"}]}, "default_value": "x", "show_default_value": false}, {"attrs": {"maxlength": 200, "minlength": 1, "show-word-limit": true}, "field": "database", "label": "database", "required": true, "input_type": "TextInput", "props_info": {"rules": [{"message": "database 为必填属性", "required": true}, {"max": 200, "min": 1, "message": "database长度在 1 到 200 个字符", "trigger": "blur"}]}, "default_value": "x", "show_default_value": false}]', './tool/postgresql/icon.png', true, 'INTERNAL', 'INTERNAL', null, 'None', null, 'f0dd8f71-e4ee-11ee-8c84-a8a1595801ab', 'default');