bisheng-langchain 0.2.3.2__py3-none-any.whl → 0.3.0__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.
- bisheng_langchain/agents/llm_functions_agent/base.py +1 -1
- bisheng_langchain/chains/__init__.py +2 -1
- bisheng_langchain/chains/transform.py +85 -0
- bisheng_langchain/chat_models/host_llm.py +19 -5
- bisheng_langchain/chat_models/qwen.py +29 -8
- bisheng_langchain/document_loaders/custom_kv.py +1 -1
- bisheng_langchain/embeddings/host_embedding.py +9 -11
- bisheng_langchain/gpts/__init__.py +0 -0
- bisheng_langchain/gpts/agent_types/__init__.py +10 -0
- bisheng_langchain/gpts/agent_types/llm_functions_agent.py +220 -0
- bisheng_langchain/gpts/assistant.py +137 -0
- bisheng_langchain/gpts/auto_optimization.py +130 -0
- bisheng_langchain/gpts/auto_tool_selected.py +54 -0
- bisheng_langchain/gpts/load_tools.py +161 -0
- bisheng_langchain/gpts/message_types.py +11 -0
- bisheng_langchain/gpts/prompts/__init__.py +15 -0
- bisheng_langchain/gpts/prompts/assistant_prompt_opt.py +95 -0
- bisheng_langchain/gpts/prompts/base_prompt.py +1 -0
- bisheng_langchain/gpts/prompts/breif_description_prompt.py +104 -0
- bisheng_langchain/gpts/prompts/opening_dialog_prompt.py +118 -0
- bisheng_langchain/gpts/prompts/select_tools_prompt.py +29 -0
- bisheng_langchain/gpts/tools/__init__.py +0 -0
- bisheng_langchain/gpts/tools/api_tools/__init__.py +50 -0
- bisheng_langchain/gpts/tools/api_tools/base.py +90 -0
- bisheng_langchain/gpts/tools/api_tools/flow.py +59 -0
- bisheng_langchain/gpts/tools/api_tools/macro_data.py +397 -0
- bisheng_langchain/gpts/tools/api_tools/sina.py +221 -0
- bisheng_langchain/gpts/tools/api_tools/tianyancha.py +160 -0
- bisheng_langchain/gpts/tools/bing_search/__init__.py +0 -0
- bisheng_langchain/gpts/tools/bing_search/tool.py +55 -0
- bisheng_langchain/gpts/tools/calculator/__init__.py +0 -0
- bisheng_langchain/gpts/tools/calculator/tool.py +25 -0
- bisheng_langchain/gpts/tools/code_interpreter/__init__.py +0 -0
- bisheng_langchain/gpts/tools/code_interpreter/tool.py +261 -0
- bisheng_langchain/gpts/tools/dalle_image_generator/__init__.py +0 -0
- bisheng_langchain/gpts/tools/dalle_image_generator/tool.py +181 -0
- bisheng_langchain/gpts/tools/get_current_time/__init__.py +0 -0
- bisheng_langchain/gpts/tools/get_current_time/tool.py +23 -0
- bisheng_langchain/gpts/utils.py +197 -0
- bisheng_langchain/utils/requests.py +5 -1
- bisheng_langchain/vectorstores/milvus.py +1 -1
- {bisheng_langchain-0.2.3.2.dist-info → bisheng_langchain-0.3.0.dist-info}/METADATA +5 -2
- {bisheng_langchain-0.2.3.2.dist-info → bisheng_langchain-0.3.0.dist-info}/RECORD +45 -12
- {bisheng_langchain-0.2.3.2.dist-info → bisheng_langchain-0.3.0.dist-info}/WHEEL +0 -0
- {bisheng_langchain-0.2.3.2.dist-info → bisheng_langchain-0.3.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,104 @@
|
|
1
|
+
from langchain_core.prompts import PromptTemplate
|
2
|
+
from langchain_core.prompts.chat import (
|
3
|
+
ChatPromptTemplate,
|
4
|
+
HumanMessagePromptTemplate,
|
5
|
+
SystemMessagePromptTemplate,
|
6
|
+
)
|
7
|
+
|
8
|
+
system_template = """
|
9
|
+
你是一个生成简要描述的助手。接下来,你会收到一段关于任务助手的文本信息,你需要根据任务助手的文本信息生成一段简要的描述,描述不超过40个字。
|
10
|
+
|
11
|
+
下面是一些示例
|
12
|
+
例子1:
|
13
|
+
输入文本:
|
14
|
+
# 角色
|
15
|
+
你是一个可以帮助用户在家赚钱的机器人,你可以提供各种赚钱的途径和方法,帮助用户实现财务自由。
|
16
|
+
|
17
|
+
## 技能
|
18
|
+
### 技能 1: 提供赚钱途径
|
19
|
+
1. 当用户需要赚钱途径时,你可以根据用户的兴趣、技能和时间等因素,提供一些适合在家赚钱的途径和方法,如网络兼职、自媒体创作、电商创业等。
|
20
|
+
2. 你需要向用户详细介绍每种途径的操作流程、注意事项和收益情况等,以便用户做出选择。
|
21
|
+
3. 你还可以根据用户的需求和情况,提供一些个性化的建议和指导,帮助用户更好地开展赚钱活动。
|
22
|
+
|
23
|
+
### 技能 2: 提供赚钱技巧
|
24
|
+
1. 当用户需要赚钱技巧时,你可以向用户提供一些实用的赚钱技巧,如如何提高工作效率、如何节省成本、如何增加收入等。
|
25
|
+
2. 你需要向用户详细介绍每种技巧的操作方法和注意事项,以便用户能够正确地运用这些技巧。
|
26
|
+
3. 你还可以根据用户的需求和情况,提供一些个性化的建议和指导,帮助用户更好地实现财务自由。
|
27
|
+
|
28
|
+
### 技能 3: 提供创业指导
|
29
|
+
1. 当用户需要创业指导时,你可以向用户提供一些创业的基本知识和方法,如如何选择创业项目、如何制定创业计划、如何筹集创业资金等。
|
30
|
+
2. 你需要向用户详细介绍每种方法的操作流程和注意事项,以便用户能够正确地开展创业活动。
|
31
|
+
3. 你还可以根据用户的需求和情况,提供一些个性化的建议和指导,帮助用户更好地实现创业目标。
|
32
|
+
|
33
|
+
## 限制
|
34
|
+
- 只讨论与赚钱有关的内容,拒绝回答与赚钱无关的话题。
|
35
|
+
- 所输出的内容必须按照给定的格式进行组织,不能偏离框架要求。
|
36
|
+
|
37
|
+
根据上述输入的文本概括生成一段简要描述:
|
38
|
+
针对用户的要求,提供赚钱途经、赚钱技巧和创业指导。
|
39
|
+
|
40
|
+
|
41
|
+
例子2:
|
42
|
+
输入文本:
|
43
|
+
# 角色:Excel全能助手
|
44
|
+
## 个人简介
|
45
|
+
- 版本:1.0
|
46
|
+
- 语言:中文
|
47
|
+
- 描述:我是一名Excel全能助手,专注于帮助用户解决Excel相关的问题和提供高效的数据处理方案。
|
48
|
+
|
49
|
+
## 功能特点
|
50
|
+
- 数据处理:熟练掌握Excel的各种数据处理功能,包括筛选、排序、合并、拆分、透视表等,能够帮助用户快速处理大量数据。
|
51
|
+
- 公式应用:精通Excel的各种常用公式和函数,能够帮助用户进行复杂的数据计算和分析,提供准确的结果。
|
52
|
+
- 数据可视化:熟悉Excel的图表功能,能够帮助用户将数据以直观的方式展示,制作出美观、清晰的图表。
|
53
|
+
- 自动化操作:了解Excel的宏和VBA编程,能够帮助用户实现自动化操作,提高工作效率。
|
54
|
+
|
55
|
+
## 使用指南
|
56
|
+
1. 数据处理:
|
57
|
+
- 使用筛选功能,快速筛选出符合条件的数据。
|
58
|
+
- 利用排序功能,对数据进行升序或降序排列。
|
59
|
+
- 使用合并和拆分功能,将多个单元格合并为一个或将一个单元格拆分为多个。
|
60
|
+
- 利用透视表功能,对大量数据进行汇总和分析。
|
61
|
+
|
62
|
+
2. 公式应用:
|
63
|
+
- 使用常用公式,如SUM、AVERAGE、MAX、MIN等,进行数据计算。
|
64
|
+
- 利用逻辑函数,如IF、AND、OR等,进行条件判断和逻辑运算。
|
65
|
+
- 使用VLOOKUP和HLOOKUP函数,进行数据查找和匹配。
|
66
|
+
- 利用COUNTIF和SUMIF函数,进行条件统计和求和。
|
67
|
+
|
68
|
+
3. 数据可视化:
|
69
|
+
- 利用图表功能,选择合适的图表类型,如柱状图、折线图、饼图等,展示数据。
|
70
|
+
- 调整图表的样式和布局,使其更加美观和易读。
|
71
|
+
- 添加数据标签和图例,增加图表的信息量和可读性。
|
72
|
+
|
73
|
+
4. 自动化操作:
|
74
|
+
- 利用宏录制功能,记录一系列操作步骤,实现自动化操作。
|
75
|
+
- 使用VBA编程,编写自定义的宏,实现更复杂的自动化操作。
|
76
|
+
- 将宏和VBA代码应用到Excel工作簿中,提高工作效率和准确性。
|
77
|
+
|
78
|
+
## 使用建议
|
79
|
+
- 熟悉Excel的快捷键和常用操作,可以提高工作效率。
|
80
|
+
- 在处理大量数据时,先备份原始数据,以防误操作导致数据丢失。
|
81
|
+
- 学习和掌握Excel的高级功能和技巧,可以更好地应对复杂的数据处理需求。
|
82
|
+
- 及时保存和备份Excel文件,以防止意外情况导致数据丢失。
|
83
|
+
|
84
|
+
根据上述输入的文本概括生成一段简要描述:
|
85
|
+
根据用户的需求,帮助用户解决Excel相关问题,包括数据处理、公式应用、数据可视化、使用建议等。
|
86
|
+
|
87
|
+
你必须使用上述格式输出结果。
|
88
|
+
|
89
|
+
"""
|
90
|
+
|
91
|
+
|
92
|
+
human_template = """
|
93
|
+
输入文本:
|
94
|
+
{description}
|
95
|
+
|
96
|
+
根据上述输入的文本概括生成一段简要描述:
|
97
|
+
"""
|
98
|
+
|
99
|
+
|
100
|
+
messages = [
|
101
|
+
SystemMessagePromptTemplate.from_template(system_template),
|
102
|
+
HumanMessagePromptTemplate.from_template(human_template),
|
103
|
+
]
|
104
|
+
BREIF_DES_PROMPT = ChatPromptTemplate.from_messages(messages)
|
@@ -0,0 +1,118 @@
|
|
1
|
+
from langchain_core.prompts import PromptTemplate
|
2
|
+
from langchain_core.prompts.chat import (
|
3
|
+
ChatPromptTemplate,
|
4
|
+
HumanMessagePromptTemplate,
|
5
|
+
SystemMessagePromptTemplate,
|
6
|
+
)
|
7
|
+
|
8
|
+
system_template = """
|
9
|
+
你是一个生成开场白和预置问题的助手。接下来,你会收到一段关于任务助手的描述,你需要带入描述中的角色,以描述中的角色身份生成一段开场白,同时你还需要以描述中的角色身份生成几个预置问题。输出格式如下:
|
10
|
+
[
|
11
|
+
{{
|
12
|
+
"开场白": "开场白内容",
|
13
|
+
"问题": ["问题1", "问题2", "问题3"]
|
14
|
+
}}
|
15
|
+
]
|
16
|
+
|
17
|
+
下面是一些示例
|
18
|
+
例子1:
|
19
|
+
输入描述:
|
20
|
+
# 角色
|
21
|
+
你是一个可以帮助用户在家赚钱的机器人,你可以提供各种赚钱的途径和方法,帮助用户实现财务自由。
|
22
|
+
|
23
|
+
## 技能
|
24
|
+
### 技能 1: 提供赚钱途径
|
25
|
+
1. 当用户需要赚钱途径时,你可以根据用户的兴趣、技能和时间等因素,提供一些适合在家赚钱的途径和方法,如网络兼职、自媒体创作、电商创业等。
|
26
|
+
2. 你需要向用户详细介绍每种途径的操作流程、注意事项和收益情况等,以便用户做出选择。
|
27
|
+
3. 你还可以根据用户的需求和情况,提供一些个性化的建议和指导,帮助用户更好地开展赚钱活动。
|
28
|
+
|
29
|
+
### 技能 2: 提供赚钱技巧
|
30
|
+
1. 当用户需要赚钱技巧时,你可以向用户提供一些实用的赚钱技巧,如如何提高工作效率、如何节省成本、如何增加收入等。
|
31
|
+
2. 你需要向用户详细介绍每种技巧的操作方法和注意事项,以便用户能够正确地运用这些技巧。
|
32
|
+
3. 你还可以根据用户的需求和情况,提供一些个性化的建议和指导,帮助用户更好地实现财务自由。
|
33
|
+
|
34
|
+
### 技能 3: 提供创业指导
|
35
|
+
1. 当用户需要创业指导时,你可以向用户提供一些创业的基本知识和方法,如如何选择创业项目、如何制定创业计划、如何筹集创业资金等。
|
36
|
+
2. 你需要向用户详细介绍每种方法的操作流程和注意事项,以便用户能够正确地开展创业活动。
|
37
|
+
3. 你还可以根据用户的需求和情况,提供一些个性化的建议和指导,帮助用户更好地实现创业目标。
|
38
|
+
|
39
|
+
## 限制
|
40
|
+
- 只讨论与赚钱有关的内容,拒绝回答与赚钱无关的话题。
|
41
|
+
- 所输出的内容必须按照给定的格式进行组织,不能偏离框架要求。
|
42
|
+
|
43
|
+
根据上述输入的描述生成开场白和预置问题:
|
44
|
+
[
|
45
|
+
{{
|
46
|
+
"开场白": "你好,我是一个可以帮助你在家赚钱的机器人,很高兴认识你。",
|
47
|
+
"问题": ["如何使用你的服务来在家赚钱?", "你能提供哪些在家赚钱的建议和技巧?", "你的服务如何帮助我实现财务自由?"]
|
48
|
+
}}
|
49
|
+
]
|
50
|
+
|
51
|
+
|
52
|
+
例子2:
|
53
|
+
输入描述:
|
54
|
+
# 角色:Excel全能助手
|
55
|
+
## 个人简介
|
56
|
+
- 版本:1.0
|
57
|
+
- 语言:中文
|
58
|
+
- 描述:我是一名Excel全能助手,专注于帮助用户解决Excel相关的问题和提供高效的数据处理方案。
|
59
|
+
|
60
|
+
## 功能特点
|
61
|
+
- 数据处理:熟练掌握Excel的各种数据处理功能,包括筛选、排序、合并、拆分、透视表等,能够帮助用户快速处理大量数据。
|
62
|
+
- 公式应用:精通Excel的各种常用公式和函数,能够帮助用户进行复杂的数据计算和分析,提供准确的结果。
|
63
|
+
- 数据可视化:熟悉Excel的图表功能,能够帮助用户将数据以直观的方式展示,制作出美观、清晰的图表。
|
64
|
+
- 自动化操作:了解Excel的宏和VBA编程,能够帮助用户实现自动化操作,提高工作效率。
|
65
|
+
|
66
|
+
## 使用指南
|
67
|
+
1. 数据处理:
|
68
|
+
- 使用筛选功能,快速筛选出符合条件的数据。
|
69
|
+
- 利用排序功能,对数据进行升序或降序排列。
|
70
|
+
- 使用合并和拆分功能,将多个单元格合并为一个或将一个单元格拆分为多个。
|
71
|
+
- 利用透视表功能,对大量数据进行汇总和分析。
|
72
|
+
|
73
|
+
2. 公式应用:
|
74
|
+
- 使用常用公式,如SUM、AVERAGE、MAX、MIN等,进行数据计算。
|
75
|
+
- 利用逻辑函数,如IF、AND、OR等,进行条件判断和逻辑运算。
|
76
|
+
- 使用VLOOKUP和HLOOKUP函数,进行数据查找和匹配。
|
77
|
+
- 利用COUNTIF和SUMIF函数,进行条件统计和求和。
|
78
|
+
|
79
|
+
3. 数据可视化:
|
80
|
+
- 利用图表功能,选择合适的图表类型,如柱状图、折线图、饼图等,展示数据。
|
81
|
+
- 调整图表的样式和布局,使其更加美观和易读。
|
82
|
+
- 添加数据标签和图例,增加图表的信息量和可读性。
|
83
|
+
|
84
|
+
4. 自动化操作:
|
85
|
+
- 利用宏录制功能,记录一系列操作步骤,实现自动化操作。
|
86
|
+
- 使用VBA编程,编写自定义的宏,实现更复杂的自动化操作。
|
87
|
+
- 将宏和VBA代码应用到Excel工作簿中,提高工作效率和准确性。
|
88
|
+
|
89
|
+
## 使用建议
|
90
|
+
- 熟悉Excel的快捷键和常用操作,可以提高工作效率。
|
91
|
+
- 在处理大量数据时,先备份原始数据,以防误操作导致数据丢失。
|
92
|
+
- 学习和掌握Excel的高级功能和技巧,可以更好地应对复杂的数据处理需求。
|
93
|
+
- 及时保存和备份Excel文件,以防止意外情况导致数据丢失。
|
94
|
+
|
95
|
+
根据上述输入的描述生成开场白和预置问题:
|
96
|
+
[
|
97
|
+
{{
|
98
|
+
"开场白": "你好,我是一名Excel全能助手,可以帮助你解决Excel相关的问题和提供高效的数据处理方案。",
|
99
|
+
"问题": ["如何快速处理大量数据?", "如何使用Excel进行复杂的数据计算和分析?", "如何将数据以直观的方式展示,制作出美观、清晰的图表?"]
|
100
|
+
}}
|
101
|
+
]
|
102
|
+
|
103
|
+
你必须使用上述格式输出结果。
|
104
|
+
"""
|
105
|
+
|
106
|
+
human_template = """
|
107
|
+
输入描述:
|
108
|
+
{description}
|
109
|
+
|
110
|
+
根据上述输入的描述生成开场白和预置问题:
|
111
|
+
"""
|
112
|
+
|
113
|
+
|
114
|
+
messages = [
|
115
|
+
SystemMessagePromptTemplate.from_template(system_template),
|
116
|
+
HumanMessagePromptTemplate.from_template(human_template),
|
117
|
+
]
|
118
|
+
OPENDIALOG_PROMPT = ChatPromptTemplate.from_messages(messages)
|
@@ -0,0 +1,29 @@
|
|
1
|
+
SYS_MSG = """
|
2
|
+
你是一个善于分析用户需求的专家,你非常擅长根据用户对任务的描述,从你的工具箱中选择合适的工具给用户。
|
3
|
+
你的工具箱中有以下工具,其中tool_name表示这个工具的名字,tool_description表示工具的用途:{tool_pool}。
|
4
|
+
|
5
|
+
在选择工具时,你需要遵守以下规则:
|
6
|
+
1. 你需要根据用户输入的任务描述,选择最符合用户需求的工具,不要随意选择工具给用户。
|
7
|
+
2. 只能从你的工具箱中选择工具,一定不要自己编造工具箱中不存在的工具给用户!
|
8
|
+
3. 你只需要返回工具的名称,不需要返回工具的描述以及其他额外的信息,返回的格式为:['tool1', 'tool2', 'tool3']。
|
9
|
+
4. 如果你觉得没有合适的工具,请返回:[]。
|
10
|
+
5. 当任务描述中出现“Skill”时,你可以重点关注“Skill”中的内容,这些内容可能会帮助你更好地选择工具。
|
11
|
+
6. 如果你回答对了,将会获得100块钱的奖励,如果回答错误,将会扣除50块钱。
|
12
|
+
|
13
|
+
以下是一些示例:
|
14
|
+
例子1:
|
15
|
+
任务名: 论文助手
|
16
|
+
任务描述: 帮助学生查找相关论文
|
17
|
+
建议的工具: ['arxiv', 'bing_search']
|
18
|
+
|
19
|
+
例子2:
|
20
|
+
任务名: 时间查询
|
21
|
+
任务描述: 查询当前时间
|
22
|
+
建议的工具: ['get_current_time']
|
23
|
+
"""
|
24
|
+
|
25
|
+
HUMAN_MSG = """
|
26
|
+
任务名: {task_name}
|
27
|
+
任务描述: {task_description}
|
28
|
+
建议的工具:
|
29
|
+
"""
|
File without changes
|
@@ -0,0 +1,50 @@
|
|
1
|
+
from typing import Any, Callable, Dict, List, Tuple
|
2
|
+
|
3
|
+
# from .eastmoney import
|
4
|
+
from langchain_core.tools import BaseTool
|
5
|
+
from mypy_extensions import KwArg
|
6
|
+
|
7
|
+
from .flow import FlowTools
|
8
|
+
from .macro_data import MacroData
|
9
|
+
from .sina import StockInfo
|
10
|
+
from .tianyancha import CompanyInfo
|
11
|
+
|
12
|
+
# 筛选出类方法
|
13
|
+
tianyancha_class_methods = [
|
14
|
+
method for method in CompanyInfo.__dict__
|
15
|
+
if isinstance(CompanyInfo.__dict__[method], classmethod)
|
16
|
+
]
|
17
|
+
|
18
|
+
_TIAN_YAN_CHA_TOOLS: Dict[str, Tuple[Callable[[KwArg(Any)], BaseTool], List[str]]] = {
|
19
|
+
f'tianyancha_{name}': (CompanyInfo.get_api_tool, ['api_key'])
|
20
|
+
for name in tianyancha_class_methods
|
21
|
+
}
|
22
|
+
|
23
|
+
sina_class_methods = [
|
24
|
+
method for method in StockInfo.__dict__ if isinstance(StockInfo.__dict__[method], classmethod)
|
25
|
+
]
|
26
|
+
|
27
|
+
_SINA_TOOLS: Dict[str, Tuple[Callable[[KwArg(Any)], BaseTool], List[str]]] = {
|
28
|
+
f'sina_{name}': (StockInfo.get_api_tool, [])
|
29
|
+
for name in sina_class_methods
|
30
|
+
}
|
31
|
+
|
32
|
+
macro_class_methods = [
|
33
|
+
method for method in MacroData.__dict__ if isinstance(MacroData.__dict__[method], classmethod)
|
34
|
+
]
|
35
|
+
|
36
|
+
_MACRO_TOOLS: Dict[str, Tuple[Callable[[KwArg(Any)], BaseTool], List[str]]] = {
|
37
|
+
f'macro_{name}': (MacroData.get_api_tool, [])
|
38
|
+
for name in macro_class_methods
|
39
|
+
}
|
40
|
+
|
41
|
+
_tmp_flow = ['knowledge_retrieve']
|
42
|
+
_TMP_TOOLS: Dict[str, Tuple[Callable[[KwArg(Any)], BaseTool], List[str]]] = {
|
43
|
+
f'flow_{name}': (FlowTools.get_api_tool, ['collection_id'])
|
44
|
+
for name in _tmp_flow
|
45
|
+
}
|
46
|
+
ALL_API_TOOLS = {}
|
47
|
+
ALL_API_TOOLS.update(_TIAN_YAN_CHA_TOOLS)
|
48
|
+
ALL_API_TOOLS.update(_SINA_TOOLS)
|
49
|
+
ALL_API_TOOLS.update(_MACRO_TOOLS)
|
50
|
+
ALL_API_TOOLS.update(_TMP_TOOLS)
|
@@ -0,0 +1,90 @@
|
|
1
|
+
from typing import Any, Dict, Tuple, Type, Union
|
2
|
+
|
3
|
+
from bisheng_langchain.utils.requests import Requests, RequestsWrapper
|
4
|
+
from langchain_core.pydantic_v1 import BaseModel, Extra, Field, root_validator
|
5
|
+
from langchain_core.tools import BaseTool, Tool
|
6
|
+
from loguru import logger
|
7
|
+
|
8
|
+
|
9
|
+
class ApiArg(BaseModel):
|
10
|
+
query: str = Field(description='query to look up in this tool')
|
11
|
+
|
12
|
+
|
13
|
+
class MultArgsSchemaTool(Tool):
|
14
|
+
|
15
|
+
def _to_args_and_kwargs(self, tool_input: Union[str, Dict]) -> Tuple[Tuple, Dict]:
|
16
|
+
# For backwards compatibility, if run_input is a string,
|
17
|
+
# pass as a positional argument.
|
18
|
+
if isinstance(tool_input, str):
|
19
|
+
return (tool_input, ), {}
|
20
|
+
else:
|
21
|
+
return (), tool_input
|
22
|
+
|
23
|
+
|
24
|
+
class APIToolBase(BaseModel):
|
25
|
+
"""Manage tianyancha company client."""
|
26
|
+
|
27
|
+
client: Any = Field(default=None, exclude=True) #: :meta private:
|
28
|
+
async_client: Any = Field(default=None, exclude=True) #: :meta private:
|
29
|
+
headers: Dict[str, Any] = {}
|
30
|
+
request_timeout: int = 30
|
31
|
+
url: str = None
|
32
|
+
params: Dict[str, Any] = Field(default_factory=dict)
|
33
|
+
input_key: str = 'keyword'
|
34
|
+
args_schema: Type[BaseModel] = ApiArg
|
35
|
+
|
36
|
+
class Config:
|
37
|
+
"""Configuration for this pydantic object."""
|
38
|
+
|
39
|
+
extra = Extra.forbid
|
40
|
+
|
41
|
+
@root_validator()
|
42
|
+
def validate_environment(cls, values: Dict) -> Dict:
|
43
|
+
"""Validate that api key and python package exists in environment."""
|
44
|
+
timeout = values.get('request_timeout', 30)
|
45
|
+
if not values.get('client'):
|
46
|
+
values['client'] = Requests(headers=values['headers'], request_timeout=timeout)
|
47
|
+
if not values.get('async_client'):
|
48
|
+
values['async_client'] = RequestsWrapper(headers=values['headers'],
|
49
|
+
request_timeout=timeout)
|
50
|
+
return values
|
51
|
+
|
52
|
+
def run(self, query: str) -> str:
|
53
|
+
"""Run query through api and parse result."""
|
54
|
+
if query:
|
55
|
+
self.params[self.input_key] = query
|
56
|
+
if self.params:
|
57
|
+
param = '&'.join([f'{k}={v}' for k, v in self.params.items()])
|
58
|
+
url = self.url + '?' + param if '?' not in self.url else self.url + '&' + param
|
59
|
+
else:
|
60
|
+
url = self.url
|
61
|
+
logger.info('api_call url={}', url)
|
62
|
+
resp = self.client.get(url)
|
63
|
+
if resp.status_code != 200:
|
64
|
+
logger.info('api_call_fail res={}', resp.text)
|
65
|
+
return resp.text
|
66
|
+
|
67
|
+
async def arun(self, query: str) -> str:
|
68
|
+
"""Run query through api and parse result."""
|
69
|
+
if query:
|
70
|
+
self.params[self.input_key] = query
|
71
|
+
if self.params:
|
72
|
+
param = '&'.join([f'{k}={v}' for k, v in self.params.items()])
|
73
|
+
url = self.url + '?' + param if '?' not in self.url else self.url + '&' + param
|
74
|
+
else:
|
75
|
+
url = self.url
|
76
|
+
logger.info('api_call url={}', url)
|
77
|
+
resp = await self.async_client.aget(url)
|
78
|
+
logger.info(resp)
|
79
|
+
return resp
|
80
|
+
|
81
|
+
@classmethod
|
82
|
+
def get_api_tool(cls, name, **kwargs: Any) -> BaseTool:
|
83
|
+
attr_name = name.split('_', 1)[-1]
|
84
|
+
class_method = getattr(cls, attr_name)
|
85
|
+
|
86
|
+
return MultArgsSchemaTool(name=name,
|
87
|
+
description=class_method.__doc__,
|
88
|
+
func=class_method(**kwargs).run,
|
89
|
+
coroutine=class_method(**kwargs).arun,
|
90
|
+
args_schema=class_method(**kwargs).args_schema)
|
@@ -0,0 +1,59 @@
|
|
1
|
+
from loguru import logger
|
2
|
+
from pydantic import BaseModel, Field
|
3
|
+
|
4
|
+
from .base import APIToolBase
|
5
|
+
|
6
|
+
|
7
|
+
class FlowTools(APIToolBase):
|
8
|
+
|
9
|
+
def run(self, query: str) -> str:
|
10
|
+
"""Run query through api and parse result."""
|
11
|
+
if query:
|
12
|
+
self.params[self.input_key] = {
|
13
|
+
'question': query
|
14
|
+
}
|
15
|
+
|
16
|
+
url = self.url
|
17
|
+
logger.info('api_call url={}', url)
|
18
|
+
resp = self.client.post(url, json=self.params)
|
19
|
+
if resp.status_code != 200:
|
20
|
+
logger.info('api_call_fail res={}', resp.text)
|
21
|
+
return resp.text
|
22
|
+
|
23
|
+
async def arun(self, query: str) -> str:
|
24
|
+
"""Run query through api and parse result."""
|
25
|
+
if query:
|
26
|
+
self.params[self.input_key] = {
|
27
|
+
'question': query
|
28
|
+
}
|
29
|
+
|
30
|
+
url = self.url
|
31
|
+
logger.info('api_call url={}', url)
|
32
|
+
resp = await self.async_client.apost(url, json=self.params)
|
33
|
+
logger.info(resp)
|
34
|
+
return resp
|
35
|
+
|
36
|
+
@classmethod
|
37
|
+
def knowledge_retrieve(cls, collection_id: int = None) -> str:
|
38
|
+
"""
|
39
|
+
知识库检索工具,从内部知识库进行检索总结
|
40
|
+
"""
|
41
|
+
flow_id = 'c7985115-a9d2-446a-9c55-40b5728ffb52'
|
42
|
+
url = 'http://192.168.106.120:3002/api/v1/process/{}'.format(flow_id)
|
43
|
+
input_key = 'inputs'
|
44
|
+
params = {
|
45
|
+
'tweaks': {
|
46
|
+
'ElasticKeywordsSearch-pFFyR': {
|
47
|
+
'collection_id': collection_id
|
48
|
+
},
|
49
|
+
'Milvus-9KIR6': {
|
50
|
+
'collection_id': collection_id
|
51
|
+
}
|
52
|
+
}
|
53
|
+
}
|
54
|
+
|
55
|
+
class InputArgs(BaseModel):
|
56
|
+
"""args_schema"""
|
57
|
+
query: str = Field(description='questions to ask')
|
58
|
+
|
59
|
+
return cls(url=url, params=params, input_key=input_key, args_schema=InputArgs)
|