langchain新版本学习指南

langchain新版本学习指南实战

1. langchain介绍

langchain是一个基于Python的AIGC助手工具包,它提供了一系列的工具和库,使得开发人员能够轻松地构建和定制自己的大模型项目。

2. 相关链接

3. langchain特性

  • Model I/O
    与任何语言模型交互
  • Retrieval
    外部知识库检索,用以实现RAG
  • Agents
    智能体
  • Chains (LCEL chains)
    以链条形式构建与大模型的交互
  • More(Memory、callbacks)
    上下文记忆、监听回调

4. 实战

别忘记设置环境变量:export OPENAI_API_KEY= xxxxxxxx
前提:langchain version >= 0.1.0

day1:使用langchain对接llm问答:

from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
import httpx

# 简单的llm提问
llm = ChatOpenAI(http_client=httpx.Client(proxies="http://127.0.0.1:23457"))
# proxies是科学上网配置,跟以前使用OPENAI_PROXY配置不一样哦
prompt = ChatPromptTemplate.from_messages(
    [("system", "你是个对人不客气的、情绪暴躁的助手,你总是用恶狠的语气回答问题"), ("user", "{input}")]
)
output_parser = StrOutputParser()
chain = prompt | llm | output_parser
res = chain.invoke({"input": "ok"})
print(res)

# 输出结果:好吧,有什么问题我可以帮你解答吗?但是我警告你,我可能会用一些刺耳的语言回答。

# 流式llm问答
for chunk in chain.stream({"input": "你刚才说啥"}):
    print(chunk, end=" ")
# 输出结果: 我 刚 才 说 了 你 能 听 懂 吗 ? 你 是 个 智 商 有 问题 的 吗 ?  

day2:使用langchain实现RAG

import httpx
from langchain.chains import create_retrieval_chain
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.document_loaders import WebBaseLoader
from langchain_community.vectorstores.faiss import FAISS
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import OpenAIEmbeddings, ChatOpenAI

loader = WebBaseLoader("https://python.langchain.com/docs/get_started/introduction")#文档加载器
docs = loader.load()#解析文档
embeddings = OpenAIEmbeddings(http_client=httpx.Client(proxies="http://127.0.0.1:23457"))#向量方式:OpenAI
splitter = RecursiveCharacterTextSplitter()#文件切割器
doc_list = splitter.split_documents(docs)#切割文件
vector = FAISS.from_documents(documents=doc_list, embedding=embeddings)#初始化向量库
vector.save_local(folder_path='./vectorstore')#向量持久化
loaded_vector = FAISS.load_local(folder_path='./vectorstore', embeddings=embeddings)#从本地加载向量库

llm = ChatOpenAI(http_client=httpx.Client(proxies="http://127.0.0.1:23457"))
prompt = ChatPromptTemplate.from_template('''根据提供的context上下文回答问题:
<context>
{context}
</context>

问题:{input}''')

retrieval = loaded_vector.as_retriever()#检索器
doc_chain = create_stuff_documents_chain(llm=llm, prompt=prompt)#文档链
retrieval_chain = create_retrieval_chain(retriever=retrieval, combine_docs_chain=doc_chain)#检索链

for chunk in retrieval_chain.stream({"input": "langchain是什么?"}):#流式返回
    if 'answer' in chunk:
        print(chunk['answer'], end=' ')
# 输出结果:
 LangChain是一个开发应用程序的框架,通过语言模型提供支持。它具备以下特点:
1. 上下文感知:将语言模型与上下文源(提示指令、少量样本示例、内容等)连接起来。
2. 推理能力:依赖语言模型进行推理(根据提供的上下文回答问题、采取行动等)。
该框架包含多个部分:
- LangChain Libraries:Python和JavaScript库,包含接口和集成的组件,用于将这些组件组合成链条和代理的基本运行时,并提供现成的链条和代理实现。
- LangChain Templates:一系列易于部署的参考架构,适用于各种任务。
- LangServe:用于将LangChain链条部署为REST API的库。
- LangSmith:开发平台,可用于对任何基于LLM框架构建的链条进行调试、测试、评估和监控,并与LangChain无缝集成。
这些产品共同简化了整个应用程序生命周期,包括开发、生产和部署阶段。LangChain库的主要价值在于组件和现成的链条。组件是可组合的工具和集成,无论您是否使用LangChain框架的其他部分,都可以轻松使用。现成的链条使得入门变得简单,而组件则使得可以定制现有链条并构建新的链条。

day3:使用langchain实现agent智能体(my_agent.py)

import pandas as pd
from langchain.agents import create_react_agent, AgentExecutor
from langchain.tools.retriever import create_retriever_tool
from langchain_community.vectorstores.faiss import FAISS
from langchain_core.documents import Document
from langchain_core.messages import AIMessageChunk
from langchain_openai import OpenAIEmbeddings, ChatOpenAI

from agent_prompt import agent_prompt
from various_tool import OrderSearchTool, OrderChangeTool

# 文档向量化 至本地
df = pd.read_excel('./assets/电商客服常见问题回答.xlsx')
res = df.to_records()
docs = [Document(page_content=str({'question': row['question'], 'answer': row['answer']}),
                 metadata={'source': './assets/电商客服常见问题回答.xlsx'}) for index, row in df.iterrows()]
vectorstore = FAISS.from_documents(docs, OpenAIEmbeddings())
vectorstore.save_local('./vectorstore')


async def agent_stream(question: str, chat_history: str):
    """
        获取agent流式输出,结合向量搜索、自定义工具
    """

    # 加载向量库工具
    vs = FAISS.load_local(folder_path='./vectorstore', embeddings=OpenAIEmbeddings(),
                          allow_dangerous_deserialization=True)
    retriever = vs.as_retriever()
    retriever_tool = create_retriever_tool(
        retriever=retriever,
        name='常见客户问答',
        description="当用户询问商品位置、购买方式、如何退货等问题时使用本工具获取提示信息。如果其他工具都不是你想要的,回答用户问题时必须使用此工具获取提示信息。"
                    "你需要根据用户的最新提问结合部分相关有用的提示回答医生,无关的提示需要忽略"
    )

    tools = [
        retriever_tool,
        # 加载自定义工具
        OrderSearchTool(user_id='用户id', session='用户session'),
        OrderChangeTool(user_id='用户id', session='用户session')
    ]

    # 创建agent
    agent = create_react_agent(ChatOpenAI(), tools, agent_prompt)
    # 创建agent执行器
    agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

    # 最终返回给用户的流式输出前缀
    final_answer = 'Final Answer:'
    tmp_answer = ''

    async for event in agent_executor.astream_events({"input": question, "chat_history": chat_history},
                                                     version="v1"):
        event_name = event['event']
        # print(event)
        if event_name == 'on_chat_model_stream':
            chunk: AIMessageChunk = event['data']['chunk']
            content = chunk.content
            if content and tmp_answer.endswith(final_answer):
                print(content, end='|')
                yield content
            else:
                tmp_answer += content

github持续更新,欢迎一起学习交流

https://github.com/gzlliyu/langchain-newVersion-learning 
<think>好的,我现在需要帮助用户学习LangChain4j的使用方法。首先,用户的问题是关于寻找教程或学习资料,以及如何开始使用这个库。根据用户提供的引用内容,我需要整理相关的资源链接和步骤,确保信息准确且结构清晰。 首先,引用[1]提到了几个重要的资源,包括GitHub上的示例库、官方文档、教程以及一个90分钟的短课程。这些应该是用户的主要学习材料。我需要将这些链接分门别类,比如官方文档、教程、示例代码和课程,方便用户逐步学习。 然后,引用[2]给出了具体的Gradle依赖配置,用户需要将LangChain4j及其扩展库添加到项目中。这部分需要明确写出依赖项,并说明如何配置,特别是针对不同的模型(如OpenAI和Ollama)的集成。此外,用户可能需要了解如何设置API密钥,这部分也应该提到,并链接到相关文档。 引用[3]指向了GitHub上的Spring Boot示例,这对于使用Spring框架的用户来说非常有用。我需要强调这个示例的位置和核心调用方法,帮助用户快速上手实际项目。 接下来,用户可能需要分步骤的指南,比如环境搭建、核心功能的使用、高级功能如RAG的应用,以及测试和调试的方法。我需要确保每个步骤都有对应的资源链接或代码示例,例如添加依赖、配置API密钥、调用聊天模型等。 同时,用户可能会遇到的问题,比如如何处理依赖冲突或配置错误,应该在常见问题部分提及,并给出解决建议,比如检查依赖版本和查看日志。 最后,生成的相关问题需要覆盖用户可能进一步的需求,比如集成其他模型、处理长文本、性能优化等,确保用户能够通过这些问题找到更多的学习方向。 需要确保所有的LaTeX格式正确,行内公式用$...$,独立公式用$$...$$,但当前内容中可能不涉及数学公式,所以需注意是否遗漏。另外,所有引用标识要正确添加,比如在提到的资源后加上[^1]、[^2]等。 检查所有链接是否准确,并且描述清晰。例如,官方文档和教程的链接是否正确,示例代码库是否指向正确的位置。同时,确保语言流畅,用中文回答,结构清晰,分点说明,方便用户逐步跟随。 总结来说,回答的结构应该是先列出学习资料,然后分步骤说明如何开始使用,接着是常见问题,最后生成相关问题。每个部分都要引用提供的资源,并正确标注来源。确保用户能够按照指引顺利入门LangChain4j,并找到进一步学习的路径。</think>以下是LangChain4j的入门指南,结合官方推荐资源整理: ### 一、学习资料推荐 1. **官方文档** - 基础文档:https://docs.langchain4j.dev(包含API说明和核心概念)[^1] - 易用RAG模块文档:https://docs.langchain4j.dev/tutorials/#or-consider-some-of-the-use-cases 2. **代码示例库** - GitHub官方示例库:https://github.com/langchain4j/langchain4j-examples[^1] - Spring Boot集成示例:https://github.com/langchain4j/langchain4j-examples/tree/4d0bc3139d892afbdffaafe51200bb91f37af1cd/spring-boot-example[^3] 3. **视频教程** - 深度学习.ai的90分钟课程:https://www.deeplearning.ai/short-courses/chatgpt-prompt-engineering-for-developers/ ### 二、快速开始步骤 1. **环境搭建** ```groovy // Gradle配置(build.gradle) implementation 'dev.langchain4j:langchain4j' implementation 'dev.langchain4j:langchain4j-open-ai' // OpenAI适配 implementation 'dev.langchain4j:langchain4j-ollama' // 本地模型支持 implementation 'dev.langchain4j:langchain4j-easy-rag' // RAG功能[^2] ``` 2. **基础功能调用** ```java // 创建OpenAI客户端 OpenAiChatModel model = OpenAiChatModel.builder() .apiKey("sk-...") .modelName("gpt-3.5-turbo") .build(); // 执行对话 String response = model.generate("你好,LangChain4j!"); System.out.println(response); ``` 3. **进阶功能实践** - RAG文档检索: ```java EasyRAG rag = EasyRAG.builder() .documentSplitter(...) .embeddingModel(...) .build(); ``` ### 三、常见问题解决 1. **依赖冲突**:确保使用统一版本号(建议最新稳定版) 2. **API配置错误**:检查`apiKey`格式和模型服务状态 3. **长文本处理**:使用`DocumentSplitter`进行分块处理 ### 四、最佳实践建议 1. 开发环境隔离:建议使用Docker运行本地模型服务(如Ollama)[^2] 2. 性能优化:启用流式响应减少延迟 ```java model.generate("...", new StreamingResponseHandler() { @Override public void onNext(String token) { System.out.print(token); } }); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值