项目解决的问题:
有的公司有入职培训,但是考虑到成本,一般都是很短时间或者甚至直接忽略了面对面的培训只发册子让新员工自己学习。在培训不足的情况下,新员工可能遇到一些问题,比如信息分散(这都是比较好的情况)甚至信息缺失,这种情况下只有新人主动去问相关部门,并且对方手头刚好有才愿意提供;总之不便查询。
查询困难:原因有如下三点,①培训不足,员工都不知道哪里信息缺失;②不知道问谁 ③问了也不给你
除了查询困难,还要考虑再没有相关业务背景的情况下如何看懂冗长的文档,并且保证你花时间看懂的文档是最新的。
这里掘金课程黄佳老师讲到了类似的内容,链接见参考,为了解决上述需求,开发一套熟练掌握内部文件的QA系统就很重要了。
我会跟着老师的讲解,踩一遍坑~
我们需要的内容包括:数据源,我这里考虑简单点就是内部文件吧。
大模型应用:这部分可以延展,但我们选择跟这老师想法走
用例:我理解是具体的使用场景吧。
其实这个框架有点笼统,但是我们按老师思路走,着重看技术实现这块
按照老师的想法,整个数据处理流程是这样的:
Loading阶段,我们需要把内部数据转换成LLM可以读懂的(我个人认为这里不是Langchain哈,Langchain既然按老师想法是接口就不需要他懂)
然后进行Splitting切分,这部分目的就是为了将文档块变成一个实体吧,文档快越小也就越准确,同样也就对性能要求越高。
最后这些文档块需要存储storage,或者说需要向量化吧,向量化需要用到Embedding,我之前文章说到过,最开始的模型切出来的向量是不具备联系的,比如切出来A,1,阿尔法这样的数据;经过如今的embedding后,我们可以看到不同向量之间的联系,可以简单理解成在向量空间里不再是点,而是线了。
接下来就是检索,当我们问一个问题,(问题实际也会走这样一套流程,可以从很多大模型问答中看到,他们首先把问题提取关键词,然后用关键词去检索相似问题)
实际上最后还可以做这么一步,在检索到相似问题提供答案的时候,还可以把最终回答给用户的问题使用LLM进行优化。
这一点LangChain已经可以实现了,在这个老师后面的内容里,我这里提到也是为了避免歧义,老师是循序渐进在帮助我们学习。
接下来进入正题,我们先完成模型替换运行下代码
import os
from openai import OpenAI
DASHSCOPE_API_KEY = "xxxxx"
client = OpenAI(
api_key=DASHSCOPE_API_KEY, # 如何获取API Key:https://help.aliyun.com/zh/model-studio/developer-reference/get-api-key
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)
# text = client.invoke("请给我写一句情人节红玫瑰的中文宣传语")
response = client.chat.completions.create(
# model=os.environ.get("LLM_MODELEND"),
model="qwen-plus",
messages=[
{"role": "system", "content": "You are a creative AI."},
{"role": "user", "content": "请给我的花店起个名"},
],
temperature=0.8,
max_tokens=600,
)
print(response.choices[0].message.content)
老师本来使用的是OpenAI的key,我这里改成了阿里云的通义千问,后面链接也加了如何获取key。运行结果如下
上面内容改了APIkey就可以直接运行,但是我换成豆包用相同的方式就不行,我思考了一下应该是两者调用方式不同,我去找一下前文的文档和豆包的文档贴出来。
- 豆包基础调用如下
import os
from openai import OpenAI
from volcenginesdkarkruntime import Ark
# DASHSCOPE_API_KEY = "xx"
DASHSCOPE_API_KEY = "xx"
# 这里我使用的是OpenAI,不是官方写法Ark,一样可以运行。
client = OpenAI(
api_key=DASHSCOPE_API_KEY,
# base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
base_url="https://ark.cn-beijing.volces.com/api/v3"
)
# text = client.invoke("请给我写一句情人节红玫瑰的中文宣传语")
response = client.chat.completions.create(
# model=os.environ.get("LLM_MODELEND"),
model="ep-xxx",
# model="qwen-plus",
messages=[
{"role": "system", "content": "You are a creative AI."},
{"role": "user", "content": "你是谁"},
],
temperature=0.8,
max_tokens=600,
)
print(response.choices[0].message.content)
运行结果
通过查文档我得知这里面代码几个最重要的区别
- 可以看出上面引入是不同的,langchain_openai是第三方库,OpenAI是官方库,langchain-openai对官方库做了封装和集成,所以引入这个包即可。
既然豆包成功了我们之后都先用豆包大模型吧, 等这个写完我在用通义做一下类似的。
01快速入门的chatlangchain和textlangchain的区别
chatlangchain使用的语句是
response = llm.predict("今天几号了?")
textlangchain使用的语句是
messages = [
SystemMessage(content="你是一个很棒的智能助手"),
HumanMessage(content="请给我的花店起个名"),
]
response = chat(messages)
可以看到区别是chat方法和llm.predict方法的区别,查查文档有啥区别。
predict是单轮说话,chat是多轮说话 然后一个是系统添加的上下文,一个是用户输入
今天就到这里了,明天我还是用通义吧。头都晕了~ 通义使用chatgpt语法基本换个模型,方法不用变的。