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): 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])) messages.append(Message(role="user", content=user_prompt)) response = self._client.call( model=self.model_name, api_key=self.api_key, messages=messages ) 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