方向三:实践记录以及工具使用 | 豆包MarsCode AI刷题

153 阅读5分钟

随着人工智能的飞速发展,生成式AI技术在各行各业中大放异彩。LangChain作为一个强大的框架,旨在简化大语言模型(LLM)的集成与应用开发。本次实践基于豆包AI的LangChain实战课程,深入探索了LangChain的基本原理、模块功能以及实际开发应用,以下是完整的实践记录与经验总结。


一、课程概览与核心内容

LangChain 是一个用于构建与大语言模型(如 OpenAI 的 GPT 系列)交互的框架。豆包AI的实战课围绕以下几个核心模块展开:

  1. Prompt Templates:动态生成提示词以适配各种输入需求。
  2. Chains:链式调用多个任务,形成强大的功能流程。
  3. Memory:实现对话的上下文记忆,增强对话的连贯性。
  4. Document Loaders 与 Vector Store:结合外部知识,构建知识问答系统。
  5. 工具与Agent:集成工具实现复杂任务(如调用API、计算等)。
  6. LangChain与应用结合:结合实际需求设计交互式AI应用。

二、实践内容与过程

1. 环境搭建与LangChain入门

首先,根据课程的指导,安装必要环境:

  • Python版本:>=3.8
  • 必需库:langchainopenaifaiss-cputiktoken等。

代码示例:

bash
复制代码
pip install langchain openai faiss-cpu tiktoken

在环境准备好后,实践了LangChain的基础使用,测试了使用OpenAI GPT模型进行文本生成的简单例子:

python
复制代码
from langchain.chat_models import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain

# 初始化模型与提示模板
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
template = PromptTemplate(input_variables=["name"], template="你好,{name}!很高兴见到你!")

# 构建任务链
chain = LLMChain(llm=llm, prompt=template)
response = chain.run(name="小明")
print(response)

实践总结

  • LangChain 的模块化设计非常清晰,每一步都可以单独测试,降低了调试复杂度。
  • Prompt Template 的灵活性对于自定义任务非常有用,简单的占位符即可生成动态提示。

2. Chains模块实战:多任务处理

在 Chains 模块中,重点学习了如何将多个任务组合起来形成复杂功能。例如,将“提取关键词”和“生成摘要”链式调用,完成对文章内容的处理。

示例代码:

python
复制代码
from langchain.chains import SimpleSequentialChain

# 定义两个任务链
keyword_template = PromptTemplate(input_variables=["text"], template="从以下文本中提取关键词:{text}")
summary_template = PromptTemplate(input_variables=["text"], template="请总结以下文本:{text}")

keyword_chain = LLMChain(llm=llm, prompt=keyword_template)
summary_chain = LLMChain(llm=llm, prompt=summary_template)

# 将任务链组合
combined_chain = SimpleSequentialChain(chains=[keyword_chain, summary_chain])
result = combined_chain.run("豆包AI提供了一系列LangChain实战课程,旨在帮助开发者掌握生成式AI应用开发。")
print(result)

实践总结

  • 使用 SimpleSequentialChain 可以快速组合任务,但需要确保输出的格式与下一个任务的输入相匹配。
  • 对于复杂任务,可以自定义链逻辑,增加灵活性。

3. Memory模块:实现对话上下文记忆

Memory模块允许模型在会话中记住上下文信息,特别适用于对话机器人开发。课程中实践了ConversationBufferMemory和ConversationSummaryMemory的使用。

示例代码(对话上下文记忆):

python
复制代码
from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationChain

# 初始化内存
memory = ConversationBufferMemory()
conversation = ConversationChain(llm=llm, memory=memory)

# 多轮对话
print(conversation.run("你好,我是小F。"))
print(conversation.run("我喜欢编程,你呢?"))
print(conversation.run("还记得我是谁吗?"))

实践总结

  • ConversationBufferMemory 简单高效,但当对话历史过长时效率会下降。
  • 对于更复杂的上下文管理,可以尝试使用 ConversationSummaryMemory,将上下文压缩成摘要。

4. 知识问答系统:Document Loaders与Vector Store

课程中特别强调了知识增强型问答的实现。在实践中,加载外部文档(如PDF、Markdown)并将其转换为向量,结合检索机制实现精准问答。

代码示例:

python
复制代码
from langchain.document_loaders import TextLoader
from langchain.vectorstores import FAISS
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.chains import RetrievalQA

# 加载文档
loader = TextLoader("sample.txt")
documents = loader.load()

# 构建向量存储
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.from_documents(documents, embeddings)

# 检索问答
retriever = vectorstore.as_retriever()
qa = RetrievalQA.from_chain_type(llm=llm, retriever=retriever)
response = qa.run("LangChain 的主要功能是什么?")
print(response)

实践总结

  • FAISS 是构建本地向量检索的好工具,处理速度快且容易部署。
  • 文档预处理是关键步骤,确保文档被分割为适合的片段以提高检索准确性。

5. 工具与Agent:动态任务处理

Agent模块允许模型动态调用工具,完成复杂任务(如计算、检索API数据)。在实践中,实现了一个具备计算能力的智能助手。

代码示例:

python
复制代码
from langchain.agents import load_tools, initialize_agent, AgentType
from langchain.llms import OpenAI

# 加载工具
tools = load_tools(["serpapi", "llm-math"], llm=llm)

# 初始化Agent
agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)

# 使用Agent完成任务
response = agent.run("计算 2 的 3 次方是多少?")
print(response)

实践总结

  • 工具功能强大且易扩展,尤其适合需要外部知识或动态计算的场景。
  • 注意API工具(如SerpAPI)需要提前配置环境变量。

三、经验总结

优点

  1. 模块化设计:LangChain 各个模块(Prompt, Chains, Memory 等)职责明确,可组合性强。
  2. 扩展性强:支持多种模型、工具与存储方式,适应不同的开发需求。
  3. 高效开发:通过框架封装,减少了手动处理提示词、上下文和任务流的复杂性。

注意点

  1. 模型成本:如果使用 OpenAI 的 API,大量请求可能导致较高成本。
  2. 调试复杂性:多链组合时,确保输入输出格式正确,否则容易出现逻辑问题。
  3. 文档处理效率:知识问答系统对文档分割和嵌入向量的质量要求较高。

实用场景

  1. 智能问答:结合企业内部文档,实现高效知识检索。
  2. 多轮对话机器人:适用于客服、教育等场景。
  3. 流程自动化:将多个任务自动化处理,提升生产力。

通过本次LangChain实战课程的学习,不仅掌握了框架的基础使用,还初步理解了如何结合实际需求设计应用。未来,可以进一步探索LangChain与其他框架(如Streamlit、Gradio)的集成,开发出更强大的智能应用。