langchain 《斗破苍穹》智谱 RAG 问题搜索

目录

代码

项目介绍

模型对比实验

分块方法对比

检索方法对比

结果

10条问题

15条问题

局限性


代码

https://github.com/5zjk5/prompt-engineering/tree/master

项目介绍

《斗破苍穹》小说 RAG 问答,爬虫爬取整部小说章节,并分别保存到不同的数据源中。 txt,pdf,markdown,word。

对数据进行分块,召回,根据问题生成回答。

对比了智谱 GLM 系列所有模型,以及不同召回块数(字数)的效果。

模型对比实验

spider.py 为爬虫代码

先用前 100 章节测试,再测试全部章节。 设置 10 个问题,控制变量法 测试结果如下: 

对比结果写在了 J 列,总结:

  1. glm_4_flash,glm-4-long 两个模型在效果上比较好,时间可以接受,准确率相对较好。
  2. glm-4-long 选择了这个模型去继续用。在 15w 字这个模型理解还是比较好的。

分块方法对比

  1. 字数分块,512, 1000,在 7-15w 字效果差不多
  2. 字数分块对比字数分块带上元数据的,效果也差不多,可能相差 1 个左右的准确率
  3. 并且别人有验证的带上元数据有好处的,所有后面都带上了

检索方法对比

 

  1. 较好的方法是相似性检索,及 mmr 但这两个对比在这里是一样,所以就用了相似性 similary
  2. 其他是 langchain 中的其他方法
  3. 上面的结论说了再 15w 左右是可以得到答案,且速度还可以,理解也不错,但 15w 还是太多了 ,所以先检索 150 个快,15w 字,在从 15w 在检索 50w ,这样更准确,却耗费 token 更少。

结果

上面的实验都是在选择,所以最终选择组合为:

  1. 字数分块+元数据,分块字数 1000
  2. glm-4-long 模型
  3. 检索相似性 similary,再混合检索(bm25+相似)得到 50w 字左右上下文参考

10条问题

data/test_doc_question.json 在 10 条问题上,使用前 100 章的问题,表现为 80-90%。

在 10 条问题三,使用全部章节,表现为 70-80%。因为内容多了,检索的东西会不一样且受问题影响。

例如:萧炎遇见的神秘老者是谁?

在前 100 章明显是药老,但全文不一定了,神秘老者可能多次出现,如岩浆下的老者等。问得范围太大了。

15条问题

data/doc_question.json 80-86.6% 浮动

局限性

这个属于常见的 RAG 方法,字数分块,然后检索相关内容,然后生成答案。 但通过这个检索检索会有一下局限性:

  1. 具有关联关系的问题是回答不出来的,如问题“萧炎在风雷大会上遇见的迦南学院的熟人是谁?”

检索回来可能是迦南学院有关的人,但不全,不能结合风雷大会去回答。

  1. 例如“萧炎老婆是谁?”这小说并没有明确写出‘萧炎的老婆是xxx’这种话,但读者们都知道他老婆的谁

  2. 上下文理解少,比如“萧炎晋级斗尊前跟谁打架了?”能找到晋级的那一章,但是跟谁打架了,这是需要前面的剧情的理解的,这并不会检索回来,所以跟问题有关的 上下文不太适合这种 RAG。适合检索某个片段然后回答这个片段的问题。

  3. 生成的回答,及检索的内容受问题影响,如上面说的“神秘老者”的问题,问题月具体效果越好。

<think>好的,我需要帮助用户了解如何部署LangChain智谱AI的集成。首先,我需要回顾用户提供的引用内容,看看里面有没有相关的步骤或信息。 引用[1]提到智谱AI推出了GLM4和API SDKv4,用户想将GLM集成到自己的应用中,并提到了使用LangChain。引用[2]和[4]则提到了使用LangChain构建SpringBoot应用和RAG应用的例子,说明可能有相关的项目或教程。引用[3]展示了在Python中导入模块并实例化模型,这可能与调用API有关。 接下来,我需要整理部署集成的步骤。通常,集成大模型需要几个步骤:安装SDK、获取API密钥、编写代码调用API、结合LangChain框架。用户可能需要具体的代码示例和配置方法。 首先,安装必要的库。根据引用[3],可能需要安装langchain-openai,但智谱AI可能有自己的SDK,比如zhipuai。需要确认是否正确,可能需要安装zhipuai库和langchain。 然后,获取API密钥。用户需要在智谱AI的平台上注册并获取API key,这通常在环境变量中设置,避免硬编码。 接下来,实例化模型。引用[3]中使用了BaseChatOpenAI,但智谱AI可能需要不同的类,比如可能有一个ZhipuAI的封装类,或者使用langchain的接口进行适配。可能需要查看智谱AI的官方文档,或者参考引用[2]中的SpringBoot项目结构。 另外,引用[2]中的langchain-springboot项目可能提供了Java集成的例子,但用户的问题可能更关注Python方面的集成。不过,可能需要提到不同语言的实现方式。 在代码示例部分,需要展示如何导入正确的模块,设置API密钥,创建模型实例,并调用生成方法。比如,使用zhipuai库的ChatGLM,并集成到LangChain的链中。 还需要考虑LangChain的组件,如PromptTemplate、LLMChain等,如何与智谱AI的模型结合。引用[4]提到内置组件和数据处理,可能涉及如何将模型输出与前端组件结合。 最后,部署注意事项,如错误处理、异步调用、性能优化等,可能需要根据引用[1]中的性能测试经验来建议用户进行测试和调整。 可能还需要生成相关问题,比如如何优化集成后的性能,如何处理API限流,或者如何结合LangChain的其他模块如内存或代理。 需要确保步骤清晰,代码正确,并且引用相关的引用内容。比如在安装步骤引用[3],在项目结构引用[2]和[4]。</think>### LangChain智谱AI集成部署指南 #### 一、环境准备 1. **安装依赖库** - 安装智谱AI官方SDK:`pip install zhipuai` - 安装LangChain核心库:`pip install langchain` - 可选工具链:`pip install langchain-community`(用于扩展组件)[^1][^2] 2. **获取API密钥** - 登录智谱AI开放平台(https://open.bigmodel.cn/),创建应用并获取API Key。 #### 二、基础集成步骤 1. **配置环境变量** ```python import os os.environ["ZHIPUAI_API_KEY"] = "your_api_key_here" # 替换实际密钥 ``` 2. **模型实例化** ```python from langchain_community.llms import ZhipuAI # 假设存在该封装类[^3] glm_model = ZhipuAI(model="glm-4", temperature=0.7) ``` 3. **调用生成接口** ```python response = glm_model.invoke("解释量子计算原理") print(response) ``` #### 三、高级应用开发 1. **构建对话链(Chain)** ```python from langchain_core.prompts import ChatPromptTemplate prompt = ChatPromptTemplate.from_template("用{style}风格翻译:{text}") chain = prompt | glm_model # 使用管道运算符组合组件[^4] result = chain.invoke({"style": "文言文", "text": "Hello World"}) ``` 2. **实现RAG应用** ```python from langchain_community.vectorstores import Chroma from langchain_community.embeddings import ZhipuEmbeddings # 创建向量数据库 embeddings = ZhipuEmbeddings() vectorstore = Chroma.from_documents(documents, embeddings) # 构建检索链 retriever = vectorstore.as_retriever() rag_chain = {"context": retriever, "question": RunnablePassthrough()} | prompt | glm_model ``` #### 四、部署注意事项 1. **性能优化** - 启用流式响应:`glm_model.stream("问题")` 减少等待感知[^1] - 设置超时参数:`ZhipuAI(timeout=10)` 2. **错误处理** ```python try: response = glm_model.invoke(...) except APIError as e: print(f"API调用失败:{e.status_code}") ``` #### 五、参考项目实践 可参考开源项目`langchain-springboot`的Java实现方式,学习多语言集成模式[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值