青训营X豆包MarsCode AI训练营1-4课 | 豆包MarsCode AI 刷题

71 阅读2分钟

基础知识

  • LangChain是一个基于大语言模型(LLMs)用于构建端到端语言模型应用的框架
  • 组件:模型(Models)、提示模板(Prompts)、数据检索(Indexes)、记忆(Memory)、链(Chains)、代理(Agents)

在AI练上学确实要比在本地复现方便的很多,但有几个实例在训练课中似乎运行失败,然后尝试自己在本地复现,获取到openai_api_key后,遇到了一个问题,在代理开启情况下会出现ssl相关的报错,应该与一些关于httpx的验证相关,关闭代理的情况下又访问不了openai,查找资料使用如下代码:

import httpx
proxy_url = "http://127.0.0.1:7890"
httpx_client = httpx.Client(proxies={"http://": proxy_url, "https://": proxy_url})
openai_client = OpenAI(http_client=httpx_client)

通过这段代码使得可以正常访问并且获取到相应的回显。 Langchain更像是一个集成,在使用过程中感觉调用Langchain和直接调用openai接口返回差不多,但是Langchain集成后导致扩展性更好,可以改一点变量就可以调用访问不同的api接口如豆包的api。

QA系统实现

接着通过LangChain 框架实现了一个简易内部知识库文档问答系统

开发框架

  • 数据源: 非结构化数据(PDF), 结构化数据(SQL), 代码(python, java)
  • 大模型应用: 作为逻辑引擎生成回答
  • 用例: 构建 QA 系统

核心机制: 数据处理管道(Pipeline)

  1. Loading: 文档加载器将 Documents 加载为 LangChain 能读的形式
  2. Splitting: 文本分割器将 Documents 切分为指定大小的文档块
  3. Storage: 文档块以 Embedding 嵌入的形式存储到向量数据库(Vector DB)中形成嵌入片
  4. Retrieval: 应用程序从存储中检索文档(比较余弦相似度)中与输入问题类似的嵌入片
  5. Output: 把问题和嵌入片提示词输入给语言模型生成答案

通过5个步骤实现代码

模型I/O

这节课主要就是讲了一个大致的交互流程,首先构建出提示词,然后输入给大模型获取响应,最终解析该响应使其为一个结构化的数据,方便后续的利用,提示词模板使得可以多次进行交互chat,然后获取到多次对于不同变量的响应结果。

from langchain.output_parsers import StructuredOutputParser, ResponseSchema

prompt_template = """xxxxxx{format_instructions}"""
# 接收响应模式
response_schemas = [
    ResponseSchema(name="description", description="描述xxx信息"),
    ResponseSchema(name="reason", description="为何xxx"),
]
# 创建输出解析器
output_parser = StructuredOutputParser.from_response_schemas(response_schemas)

# 获取输出的格式说明
format_instructions = output_parser.get_format_instructions()
prompt = PromptTemplate.from_template(
    prompt_template, partial_variables={"format_instructions": format_instructions}
)

parsed_output = output_parser.parse(output.content)# output为LLM返回
parsed_output["xxx"] = 'xxx' #也可直接赋值加入内容
# {'description': 'xxxx', 'reason': 'xxxxx', 'xxx': 'xxx'}

输出解析可以将输出的语言转换为有结构的字典格式