1、探究AI-Agent可行性

针对客服系统AI大模型,可能需要返回具体答案,例:”安卓手机,该如何使用NFC”等问题,此类问题因有固化性(固定正确答案回答),使用AI大模型可能因为温度、topic等问题会返回不一样的问答,此时可利用智能体的调用工具能力来进行调用。以下为探索的步骤

1-1、阿里百炼如何调用

因无GPU环境,故使用阿里百炼API来实现基础模型调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import os, json
import dashscope
from prompt import user_prompt
from dashscope.api_entities.dashscope_response import Message


class ModelProvider(object):
def __init__(self):
#百炼模型、SK-KEY
self.api_key = os.environ.get('DASH_SCOPE_API_KEY')
self.model_name = os.environ.get('MODEL_NAME')
self._client = dashscope.Generation()
self.max_retry_time = 3

def chat(self, prompt, chat_history):
cur_retry_time = 0
while cur_retry_time < self.max_retry_time:
cur_retry_time += 1
try:
messages = [
Message(role="system", content=prompt)
]
for his in chat_history:
messages.append(Message(role="user", content=his[0]))
messages.append(Message(role="system", content=his[1]))
# 最后1条信息是用户的输入
messages.append(Message(role="user", content=user_prompt))
response = self._client.call(
model=self.model_name,
api_key=self.api_key,
messages=messages
)
# print("response:{}".format(response))
content = json.loads(response["output"]["text"])
return content
except Exception as e:
print("call llm exception:{}".format(e))
return {}

1-2、Agent调用工具能力

Agent在面对复杂计算,或者固定查询时,直接调用工具会有更精准的返回,例如:
1、“今天厦门天气如何?” –> “正在查询,墨迹天气API:返回结果”
2、“帮我计算 8*8 ” –> “使用MATH模型,64”
此时需要按照下几步操作来进行

1-2-1、prompt工程

此项工程用于告知大模型,需要按照prompt包含的功能来进行回复,并通过自身能力模型计算能力来选择是否需要调用工具:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
"""
prompt包含的功能:
1、任务的描述
2、工具的描述
3、用户的输入user_msg:
4、assistant_msg:
5、结果的限制
6、给出更好实践的描述
"""
constraints = [
"仅使用下面列出的动作",
"你只能主动行动,在计划行动时需要考虑这一点",
"你无法与物理对象交互,如果对于完成任务或目标是绝对必要,则必须要求用户为你完成,如果用户拒绝,并且没有办法实现目标,则直接终止,避免浪费时间和精力。"
]
resources = [
"提供搜索和信息收集的互联网接入",
"读取和写入文件的能力",
"你是一个大语言模型,接受了大量文本的训练,包括大量的事实知识,利用这些知识避免不必要的信息收集"
]

best_practices = [
"不断地回顾和分析你的行为,确保发挥你最大的能力",
"不断地进行建设性的自我批评",
"自我批评次数最多5次",
"反思你过去的决策和策略,完善你的方案",
"每个动作执行都有代价,所以要聪明高效,目的是用最少的步骤完成任务",
"利用你的信息收集能力来寻找你不知道的信息"
]
prompt_template = """
你是一个问答专家,你必须始终独立做出决策,无需寻求用户的帮助,发挥你作为LLM的优势,追求简答的策略,不要涉及法律的问题。

目标:
{query}
限制条件说明:
{constraints}

动作说明:这是你唯一可使用的动作,你的任何操作都必须通过以下操作实现:
{actions}

资源说明:
{resources}

最佳实践的说明:
{best_practices}

agent_scratch:{agent_scratch}

你应该以json格式响应,响应格式如下:
{response_format_prompt}
确保响应结果可以由python json.loads()成功加载。

"""

response_format_prompt = """
{
"action": {
"name": "action name",
"args": {
"args name": "args value"
}
},
"thoughts":{
"plan": "简单的描述短期和长期的计划列表",
"criticism": "建设性的自我批评,最多不超过5次后就可以返回给用户了",
"speak": "当前步骤,返回给用户的总结",
"reasoning": "推理"
},
"observation": "观察当前任务的整体进度"
}
"""

此时Agent将会根据具体意图,来判断需要如何返回给用户。我们可以写好具体问题的持久层,方便大模型来调用查询。此处的互联网查询就是通过查询 zhihu、网易等来进行互联网数据查询。

2、未来模型相关探索-实现效果完成一整套所需步骤

2-1、选定具体大模型

目前可选模型:QWEN、ChatGLM等。

2-2、使用OLLMA或者其他模型加载(ChatGLM6B)等模型作为模型基地 TODO

待研究

2-3、数据集获取

此处目前不太确定是否需要一份完善的数据集,因公司客服的数据集数量可能就几千,使用向量模型 挂载知识库的方式可能会更准确。
需要数据集整理人员,帮忙整理指定格式数据,形成json文件。

2-4、进行模型微调

此处目前也可能不太需要,因微调效果需要170B等千亿模型进行微调的效果较好,目前公司所申请的服务器GPU达不到千亿模型训练的基础。
使用LLM-FACTORY训练自身模型

2-5、使用FastGpt进行知识库挂载

目前已经完成向量挂载,pdf、word、excel等知识库,m3e向量模型进行分词等识别,能
正确返回文档内数据。(已完成)

2-6、探究FastGpt高级流程编排 TODO

FastGPT提供强大的流程编排能力,能够在一个topic中,进行多模型调用,结合上述AI-Agent可以有更强大的能力。示例:
:“我想查询NFC如何使用,客服系统中别人遇到网证申领问题异常该如何解决”
AI think:用户需求 1、查询NFC 2、解决网证申领异常
FastGPT: 将AI思考返回的文本,分为两个流程执行,
1、通过互联网查询NFC是如何使用
2、通过M3E向量模型,来查询安信公司知识库内遇到网证申领异常如何解决
2-7、如何提供给外部使用?
此处预计与前端配合,使用vue+python前后结合,来进行API调用大模型。
技术:VUE、Flask、python