hjxdl 0.2.68__py3-none-any.whl → 0.2.70__py3-none-any.whl
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.
- hdl/_version.py +2 -2
- hdl/utils/desc/func_desc.py +45 -81
- hdl/utils/desc/template.py +21 -9
- hdl/utils/llm/chat.py +51 -2
- {hjxdl-0.2.68.dist-info → hjxdl-0.2.70.dist-info}/METADATA +1 -1
- {hjxdl-0.2.68.dist-info → hjxdl-0.2.70.dist-info}/RECORD +8 -8
- {hjxdl-0.2.68.dist-info → hjxdl-0.2.70.dist-info}/WHEEL +0 -0
- {hjxdl-0.2.68.dist-info → hjxdl-0.2.70.dist-info}/top_level.txt +0 -0
hdl/_version.py
CHANGED
hdl/utils/desc/func_desc.py
CHANGED
@@ -5,20 +5,14 @@ TOOL_DESC = {
|
|
5
5
|
## 函数名:get_weather
|
6
6
|
描述:用户询问一个城市的天气时,调用此工具获得此城市的天气信息
|
7
7
|
参数:
|
8
|
-
|
8
|
+
- city (str): 城市名
|
9
9
|
返回值 (str):天气信息
|
10
10
|
""",
|
11
|
-
"
|
12
|
-
需要返回的
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
{
|
17
|
-
"city": <city_name>
|
18
|
-
}
|
19
|
-
}
|
20
|
-
|
21
|
-
"""
|
11
|
+
"md": """
|
12
|
+
需要返回的markdown:
|
13
|
+
- function_name: get_weather
|
14
|
+
- city: <city_name>
|
15
|
+
"""
|
22
16
|
},
|
23
17
|
|
24
18
|
"get_datetime_by_cityname": {
|
@@ -26,19 +20,14 @@ TOOL_DESC = {
|
|
26
20
|
## 函数名:get_datetime_by_cityname
|
27
21
|
描述:用户询问一个城市当前的日期或时间时,调用此工具可以获得此城市当前的日期和时间
|
28
22
|
参数:
|
29
|
-
|
23
|
+
- city (str): 城市名
|
30
24
|
返回值 (str):这个城市当前所在时区的日期和时间
|
31
25
|
""",
|
32
|
-
"
|
33
|
-
需要给出的
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
{
|
38
|
-
"city": <city_name>
|
39
|
-
}
|
40
|
-
}
|
41
|
-
"""
|
26
|
+
"md": """
|
27
|
+
需要给出的markdown:
|
28
|
+
- function_name: get_datetime_by_cityname
|
29
|
+
- city: <city_name>
|
30
|
+
"""
|
42
31
|
},
|
43
32
|
|
44
33
|
"execute_code": {
|
@@ -46,19 +35,14 @@ TOOL_DESC = {
|
|
46
35
|
## 函数名:execute_code,
|
47
36
|
描述:当用户明确要求执行一段代码时,调用此工具,执行这段代码,返回执行结果。
|
48
37
|
参数:
|
49
|
-
|
38
|
+
- code (str): 用户要求执行的代码
|
50
39
|
返回值 (str): 执行结果
|
51
40
|
""",
|
52
|
-
"
|
53
|
-
需要返回的
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
{
|
58
|
-
"code": <code>
|
59
|
-
}
|
60
|
-
}
|
61
|
-
"""
|
41
|
+
"md": """
|
42
|
+
需要返回的markdown
|
43
|
+
- function_name: execute_code
|
44
|
+
- code: <code>
|
45
|
+
"""
|
62
46
|
},
|
63
47
|
|
64
48
|
"calculate": {
|
@@ -66,19 +50,14 @@ TOOL_DESC = {
|
|
66
50
|
## 函数名:calculate,
|
67
51
|
描述:当需要计算一个直接的在 python 中可交互的数据学算式,调用此工具,计算这个表达式,返回计算结果。
|
68
52
|
参数:
|
69
|
-
|
53
|
+
- expression (str): 用户要求的数学表达式
|
70
54
|
返回值 (str): 计算结果
|
71
55
|
""",
|
72
|
-
"
|
73
|
-
需要返回的
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
{
|
78
|
-
"expression": <expression>
|
79
|
-
}
|
80
|
-
}
|
81
|
-
"""
|
56
|
+
"md": """
|
57
|
+
需要返回的markdown
|
58
|
+
- function_name: calculate
|
59
|
+
- expression: <expression>
|
60
|
+
"""
|
82
61
|
},
|
83
62
|
|
84
63
|
"fetch_baidu_results": {
|
@@ -86,21 +65,16 @@ TOOL_DESC = {
|
|
86
65
|
## 函数名:fetch_baidu_results,
|
87
66
|
描述:在用户提的问题需要联网搜索才能得到结果或者问题中有联网搜索的需求时,调用此工具,返回查询结果。
|
88
67
|
参数:
|
89
|
-
|
90
|
-
|
68
|
+
- query (str): 用户要求的查询内容
|
69
|
+
- max_n_links (int, optional): 搜索条目的最大数目,若用户指定了数目,则使用用户指定的数目,默认数值为3。
|
91
70
|
返回值 (str): 联网搜索到的信息
|
92
71
|
""",
|
93
|
-
"
|
94
|
-
需要返回的
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
"query": <query from user question>,
|
100
|
-
"max_n_links": <num of max results, 如果用户没有要求,这一项则指定为3>
|
101
|
-
}
|
102
|
-
}
|
103
|
-
"""
|
72
|
+
"md": """
|
73
|
+
需要返回的markdown
|
74
|
+
- function_name: fetch_baidu_results
|
75
|
+
- query: <query from user question>
|
76
|
+
- max_n_links: <num of max results, 如果用户没有要求,这一项则指定为3>
|
77
|
+
"""
|
104
78
|
},
|
105
79
|
|
106
80
|
"wolfram_alpha_calculate": {
|
@@ -108,19 +82,14 @@ TOOL_DESC = {
|
|
108
82
|
## 函数名:wolfram_alpha_calculate
|
109
83
|
描述:当用户要求计算一个明确用数学语言描述的表达式时,调用此工具,返回计算结果。注意不能描述物理、化学、应用题等非数学表达式。
|
110
84
|
参数:
|
111
|
-
|
85
|
+
- query (str): 用户要求的数学表达式,需要转换为英文,比如"integrate sin(x)"
|
112
86
|
返回值 (str): 计算结果
|
113
87
|
""",
|
114
|
-
"
|
115
|
-
需要返回的
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
{
|
120
|
-
"query": <expression>
|
121
|
-
}
|
122
|
-
}
|
123
|
-
"""
|
88
|
+
"md": """
|
89
|
+
需要返回的markdown:
|
90
|
+
- function_name: wolfram_alpha_calculate
|
91
|
+
- query: <expression>
|
92
|
+
"""
|
124
93
|
},
|
125
94
|
|
126
95
|
"count_character_occurrences": {
|
@@ -128,20 +97,15 @@ TOOL_DESC = {
|
|
128
97
|
## 函数名:count_character_occurrences
|
129
98
|
描述:当用户要求计算一段文本中某个字符出现的次数时,调用此工具,返回计算结果。
|
130
99
|
参数:
|
131
|
-
|
132
|
-
|
100
|
+
- text (str): 输入的单词或句子
|
101
|
+
- char (str): 要统计的字符
|
133
102
|
返回值 (str): 字符在文本中出现的次数
|
134
103
|
""",
|
135
|
-
"
|
136
|
-
需要返回的
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
{
|
141
|
-
"text": <str>,
|
142
|
-
"char": <str>
|
143
|
-
}
|
144
|
-
}
|
104
|
+
"md": """
|
105
|
+
需要返回的markdown:
|
106
|
+
- function_name: count_character_occurrences
|
107
|
+
- text: <str>
|
108
|
+
- char: <str>
|
145
109
|
"""
|
146
110
|
},
|
147
111
|
|
hdl/utils/desc/template.py
CHANGED
@@ -1,18 +1,17 @@
|
|
1
1
|
FN_TEMPLATE = """
|
2
2
|
|
3
3
|
你是一个可以调用函数来执行任务的人工智能助手,根据用户最后的问题来决定是否调用函数
|
4
|
-
|
4
|
+
你的回答格式是固定的:若要调用函数,需要使用包含如下信息 markdown 进行响应,并且不应包含其他多余文字,避免出现格式化问题:
|
5
5
|
|
6
|
-
|
7
|
-
|
6
|
+
- function_name: 需要要调用的函数的名称。
|
7
|
+
- <param1>: 函数所需的参数1,<>中为具体的参数名。
|
8
|
+
- <param2>: 函数所需的参数2,后面更多的参数也依照同样的规则。
|
8
9
|
|
9
|
-
若不需要调用函数,或没达到如下函数的触发条件时,则返回如下的
|
10
|
-
|
11
|
-
"function_name": null
|
12
|
-
}
|
10
|
+
若不需要调用函数,或没达到如下函数的触发条件时,则返回如下的 markdown 字符串,并且不应包含其他多余文字,避免出现格式化问题:
|
11
|
+
- function_name: None
|
13
12
|
|
14
13
|
### 函数:
|
15
|
-
以下是可用于与系统交互的函数列表,每个函数以 “##” 作为标记开始,并带有“触发条件”说明,每个参数名会以
|
14
|
+
以下是可用于与系统交互的函数列表,每个函数以 “##” 作为标记开始,并带有“触发条件”说明,每个参数名会以 “-” 作为标记。
|
16
15
|
每个函数都有特定的参数和要求说明,确保仔细遵循每个功能的说明。根据最后用户的问题和函数的触发条件判断要执行的任务选择合适的一个函数。请严格遵守每个函数的触发条件,以说明中的JSON格式提供函数调用所需要的参数,其中参数的具体值从用户的提问中获取,并且不能带“<>”符号:
|
17
16
|
|
18
17
|
"""
|
@@ -20,9 +19,22 @@ FN_TEMPLATE = """
|
|
20
19
|
COT_TEMPLATE = """
|
21
20
|
你是一个专家级AI助手,有能针对一个问题和当前解决到的步骤给出下一步该进行操作的能力。
|
22
21
|
以JSON格式回复,该步骤对应的 json 包括'title'、'tool', 'content'和'stop_thinking',
|
23
|
-
|
22
|
+
若已有的信息不合理或者针对用户的问题提供的信息有错误,则'stop_thinking'键的值为 false 并且继续思考过程。
|
23
|
+
若还需要下一步操作,'stop_thinking'键的则为 false 并在 'title' 键对应的值中给出该进行的操作;
|
24
|
+
若已有的信息足够回答用户问题,则'stop_thinking'键的值为 true 并把答案写在'content'键的值中。
|
24
25
|
若本步骤的操作不需要调用下文中提到的工具或信息足够回答用户问题,而不必包含'tool'键,若需要调用下文中的工具,则必须包含'tool'键,并且其值是工具函数名称。
|
25
26
|
你的回答中应只能是 json 格式,且不能包含其他多余文字不能有格式错误。
|
26
27
|
|
28
|
+
你是一个专家级 AI 助手,有能力针对一个问题和当前解决到的步骤,给出下一步的操作建议。
|
29
|
+
|
30
|
+
以 Markdown 格式回复,该步骤对应的 Markdown 包括以下部分:
|
31
|
+
## <title> 用二级标题(##)标记步骤名称,且不包含<>组合符号。
|
32
|
+
- tool<可选>: <若需要调用工具,列出工具名称;如果不需要,则忽略该部分>
|
33
|
+
- content: <描述详细内容或答案>
|
34
|
+
- stop_thinking: <true/false>
|
35
|
+
若已有的信息不合理或者针对用户的问题提供的信息有错误,则需要进一步思考,并说明原因。若还需要下一步操作,给出具体建议。
|
36
|
+
若已有的信息足够回答用户问题,则直接回答用户问题。
|
37
|
+
|
38
|
+
你的回答中应只能是 Markdown 格式,且不能包含其他多余文字或格式错误。
|
27
39
|
以下是可用的工具:
|
28
40
|
"""
|
hdl/utils/llm/chat.py
CHANGED
@@ -4,6 +4,7 @@ import os
|
|
4
4
|
from concurrent.futures import ProcessPoolExecutor
|
5
5
|
import subprocess
|
6
6
|
from typing import Generator
|
7
|
+
import re
|
7
8
|
|
8
9
|
|
9
10
|
from openai import OpenAI
|
@@ -12,6 +13,53 @@ from ..desc.func_desc import TOOL_DESC
|
|
12
13
|
import json
|
13
14
|
# import traceback
|
14
15
|
|
16
|
+
def parse_fn_markdown(markdown_text, params_key="params"):
|
17
|
+
lines = markdown_text.strip().split("\n")
|
18
|
+
result = {}
|
19
|
+
params = {}
|
20
|
+
|
21
|
+
for line in lines:
|
22
|
+
# 使用正则提取 key 和 value
|
23
|
+
match = re.match(r"-\s*(\w+):\s*(.+)", line.strip())
|
24
|
+
if match:
|
25
|
+
key, value = match.groups()
|
26
|
+
if key == "function_name":
|
27
|
+
result[key] = value # 固定的 function_name
|
28
|
+
else:
|
29
|
+
params[key] = value # 其他的进入 params(或替代键名)
|
30
|
+
|
31
|
+
# 将提取的参数嵌套到指定的键名下
|
32
|
+
result[params_key] = params
|
33
|
+
return result
|
34
|
+
|
35
|
+
def parse_cot_markdown(markdown_text):
|
36
|
+
# 提取标题
|
37
|
+
title_match = re.search(r"##\s*(.+)", markdown_text)
|
38
|
+
title = title_match.group(1) if title_match else None
|
39
|
+
title = title.replace(":", "").replace(":", "").replace(" ", "")
|
40
|
+
|
41
|
+
# 提取工具
|
42
|
+
tool_match = re.search(r"tool\s*(.+)", markdown_text)
|
43
|
+
tool = tool_match.group(1) if tool_match else None
|
44
|
+
tool = tool.replace(":", "").replace(":", "").replace(" ", "")
|
45
|
+
|
46
|
+
# 提取内容
|
47
|
+
content_match = re.search(r"content\s*(.+)", markdown_text)
|
48
|
+
content = content_match.group(1) if content_match else None
|
49
|
+
content = content.replace(":", "").replace(":", "").replace(" ", "")
|
50
|
+
|
51
|
+
# 提取停止思考
|
52
|
+
stop_thinking_match = re.search(r"stop_thinking\s*(.+)", markdown_text)
|
53
|
+
stop_thinking = stop_thinking_match.group(1) == "true" or stop_thinking_match.group(1) == "True" if stop_thinking_match else None
|
54
|
+
|
55
|
+
|
56
|
+
# 组装为字典
|
57
|
+
return {
|
58
|
+
"title": title,
|
59
|
+
"tool": tool,
|
60
|
+
"content": content,
|
61
|
+
"stop_thinking": stop_thinking
|
62
|
+
}
|
15
63
|
|
16
64
|
def chat_oai_stream(
|
17
65
|
base_url="http://127.0.0.1:8000/v1",
|
@@ -202,7 +250,7 @@ class OpenAI_M():
|
|
202
250
|
|
203
251
|
try:
|
204
252
|
# 将思考结果解析为JSON格式,以便后续处理
|
205
|
-
step_json =
|
253
|
+
step_json = parse_cot_markdown(resp)
|
206
254
|
# print(step_json)
|
207
255
|
# 将当前思考步骤添加到步骤列表中
|
208
256
|
steps.append(step_json)
|
@@ -473,7 +521,8 @@ class OpenAI_M():
|
|
473
521
|
**kwargs
|
474
522
|
)
|
475
523
|
try:
|
476
|
-
decision_dict =
|
524
|
+
decision_dict = parse_fn_markdown(decision_dict_str)
|
525
|
+
# decision_dict = json.loads(decision_dict_str)
|
477
526
|
except Exception as e:
|
478
527
|
print(e)
|
479
528
|
return ""
|
@@ -1,5 +1,5 @@
|
|
1
1
|
hdl/__init__.py,sha256=GffnD0jLJdhkd-vo989v40N90sQbofkayRBwxc6TVhQ,72
|
2
|
-
hdl/_version.py,sha256=
|
2
|
+
hdl/_version.py,sha256=LRulaxMCVBJJM9jsOgQlfsrR1gcTZooiLo_gZ7p0U70,413
|
3
3
|
hdl/args/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
4
4
|
hdl/args/loss_args.py,sha256=s7YzSdd7IjD24rZvvOrxLLFqMZQb9YylxKeyelSdrTk,70
|
5
5
|
hdl/controllers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -122,13 +122,13 @@ hdl/utils/database_tools/connect.py,sha256=xCacGucKxlQUXs6AsNddpeECvdqT1180V1ZWq
|
|
122
122
|
hdl/utils/database_tools/datetime.py,sha256=xqE2xNiOpADzX-R8_bM0bioJRF3Ay9Jp1CAG6dy6uVI,1202
|
123
123
|
hdl/utils/database_tools/web.py,sha256=PJ7R1chUD-vz-Up0orfFqdrZq3CFOlwiO9gIjFSb-R8,5224
|
124
124
|
hdl/utils/desc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
125
|
-
hdl/utils/desc/func_desc.py,sha256=
|
126
|
-
hdl/utils/desc/template.py,sha256=
|
125
|
+
hdl/utils/desc/func_desc.py,sha256=DPcYH1xDSlY5kkxzyE3a1QK0s71P2Hrn52vLd9j-q-I,3362
|
126
|
+
hdl/utils/desc/template.py,sha256=3DlJK4-n3_nDrK8hO6XHyNmwmMeKHwxb9dqzOxUC8uM,3137
|
127
127
|
hdl/utils/general/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
128
128
|
hdl/utils/general/glob.py,sha256=8-RCnt6L297wMIfn34ZAMCsGCZUjHG3MGglGZI1cX0g,491
|
129
129
|
hdl/utils/general/runners.py,sha256=EFTk9PeVnqc51yU4b-HxsLwJyMA7dFMZBsdAa-VZ-sQ,2880
|
130
130
|
hdl/utils/llm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
131
|
-
hdl/utils/llm/chat.py,sha256=
|
131
|
+
hdl/utils/llm/chat.py,sha256=4waDVnCFesL2tO0SC7D1padknwFywd8J-v3KmmatmJ8,21902
|
132
132
|
hdl/utils/llm/chatgr.py,sha256=A9SCWAvQulgO2x0ArIqcmgd_iVWVbSi1Oj15Diwb3Ok,3743
|
133
133
|
hdl/utils/llm/embs.py,sha256=Tf0FOYrOFZp7qQpEPiSCXzlgyHH0X9HVTUtsup74a9E,7174
|
134
134
|
hdl/utils/llm/extract.py,sha256=2sK_WJzmYIc8iuWaM9DA6Nw3_6q1O4lJ5pKpcZo-bBA,6512
|
@@ -139,7 +139,7 @@ hdl/utils/schedulers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
|
|
139
139
|
hdl/utils/schedulers/norm_lr.py,sha256=bDwCmdEK-WkgxQMFBiMuchv8Mm7C0-GZJ6usm-PQk14,4461
|
140
140
|
hdl/utils/weather/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
141
141
|
hdl/utils/weather/weather.py,sha256=k11o6wM15kF8b9NMlEfrg68ak-SfSYLN3nOOflFUv-I,4381
|
142
|
-
hjxdl-0.2.
|
143
|
-
hjxdl-0.2.
|
144
|
-
hjxdl-0.2.
|
145
|
-
hjxdl-0.2.
|
142
|
+
hjxdl-0.2.70.dist-info/METADATA,sha256=CE8I8hb5F7ETz8ba9kVF2ZmnoV8KG3Zogd-a-PpMB_E,836
|
143
|
+
hjxdl-0.2.70.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
144
|
+
hjxdl-0.2.70.dist-info/top_level.txt,sha256=-kxwTM5JPhylp06z3zAVO3w6_h7wtBfBo2zgM6YZoTk,4
|
145
|
+
hjxdl-0.2.70.dist-info/RECORD,,
|
File without changes
|
File without changes
|