LangChain v0.1调用OpenAI接口进行智能问答教程

诸神缄默不语-个人优快云博文目录

LangChain官网:https://www.langchain.com/

LangChain是一个集成性的LLM实现方案,就是可以用它来统一地实现调用各种大模型API实现各种任务。
但是LangChain本身其实并不容易上手……只是集成性确实强,而且很多人用,所以还是得学一下。

这个是我去年需要用v0.1的时候写了一点点,我本来是想写完整的教程的,但今年又需要用langchain,我一看都尼玛更新到v0.3了,遂把本地的langchain和langchain-community也更新到最新版!
但是生产环境的langchain还是老版,所以以后还是可能会用v0.1版,所以干脆两个版本的教程都拆开来随写随发。因为langchain似乎是全面支持向前兼容的,所以估计其实都能用~

1. 安装

pip install langchain

2. OpenAI系的调用

教程网址:https://python.langchain.com/v0.1/docs/get_started/quickstart/

安装:pip install langchain-openai

各种类OpenAI的大模型调用方案都能用,只要改api_base / api_key / model就行。

比如Yi Model:

llm = ChatOpenAI(openai_api_base="https://api.lingyiwanwu.com/v1", openai_api_key="Your-API-key", model="yi-medium")

简单的提问

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(api_key=OPENAI_API_KEY, model="gpt-4-0125-preview")

return_object=llm.invoke("如何用ChatGPT?")
print(return_object.content)

ChatOpenAI的文档:https://api.python.langchain.com/en/latest/chat_models/langchain_openai.chat_models.base.ChatOpenAI.html
invoke()的文档:https://api.python.langchain.com/en/latest/chat_models/langchain_openai.chat_models.base.ChatOpenAI.html#langchain_openai.chat_models.base.ChatOpenAI.invoke

提示工程:结合系统指令或历史来提问 ChatPromptTemplate

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate

llm = ChatOpenAI(api_key=OPENAI_API_KEY, model="gpt-4-0125-preview")

prompt = ChatPromptTemplate.from_messages([
    ("system", "You are a world technical documentation writer."),
    ("user", "{input}")
])

chain = prompt | llm

return_object=chain.invoke({"input": "如何用ChatGPT?"})

print(return_object.content)

ChatPromptTemplate的文档:https://api.python.langchain.com/en/latest/prompts/langchain_core.prompts.chat.ChatPromptTemplate.html

大概功能就是写模版,更多复杂示例:

  1. 用不同的关键字来区分输入项
    template = ChatPromptTemplate.from_messages([
        ("system", "You are a helpful AI bot. Your name is {name}."),
        ("human", "Hello, how are you doing?"),
        ("ai", "I'm doing well, thanks!"),
        ("human", "{user_input}"),
    ])
    
    prompt_value = template.invoke(
        {
            "name": "Bob",
            "user_input": "What is your name?"
        }
    )
    
  2. 单一关键词时可以直接传入值,不用传入字典对象:
    template = ChatPromptTemplate.from_messages([
        ("system", "You are a helpful AI bot. Your name is Carl."),
        ("human", "{user_input}"),
    ])
    
    prompt_value = template.invoke("Hello, there!")
    
    这个invoke()等价于prompt_value = template.invoke({"user_input": "Hello, there!"})
  3. 留放历史的位置:
    写法1:
    template = ChatPromptTemplate.from_messages([
        ("system", "You are a helpful AI bot."),
        ("placeholder", "{conversation}")
    ])
    
    写法2:
    template = ChatPromptTemplate.from_messages([
        ("system", "You are a helpful AI bot."),
        MessagesPlaceholder(variable_name="conversation", optional=True)
    ])
    
    调用template:
    prompt_value = template.invoke(
        {
            "conversation": [
                ("human", "Hi!"),
                ("ai", "How can I assist you today?"),
                ("human", "Can you make me an ice cream sundae?"),
                ("ai", "No.")
            ]
        }
    )
    

如果不能解析到能用的模型中,就会报ValidationError

LangChain内置解析ChatModel输出为字符串的API:StrOutputParser

from langchain_core.output_parsers import StrOutputParser

output_parser = StrOutputParser()

chain = prompt | llm | output_parser

print(chain.invoke({"input": "如何用ChatGPT?"}))
### 如何使用LangChain开发智能体(Agent) #### 基础概念 LangChain 提供了一种灵活的方式来构建智能体(Agent)。这些智能体可以根据给定的任务调用一系列工具并执行相应操作。通过 LangChain 的 `Agent` 功能模块,开发者能够轻松集成各种外部服务和自定义逻辑[^1]。 #### 工具包的作用 在 LangChain 中,“工具”是指可以由智能使用的具体功能单元。“工具包”则是指一组预先配置好的工具集合,旨在解决某一领域内的特定问题。例如,存在专门针对 CSV 文件处理的工具包以及用于 GitHub 操作的工具包等[^2]。 #### 示例代码展示 下面提供了一个完整的 Python 脚本实例来说明如何基于 LangChain 构建一个简单的智能体: ```python from dotenv import load_dotenv from langchain.agents import AgentExecutor, create_openai_functions_agent, load_tools from langchain.tools.tavily_search import TavilySearchResults from langchain.utilities.tavily_search import TavilySearchAPIWrapper from langchain.chat_models import ChatOpenAI from langchain import hub load_dotenv() def get_function_tools(): search = TavilySearchAPIWrapper() tavily_tool = TavilySearchResults(api_wrapper=search) tools = [tavily_tool] tools.extend(load_tools(['wikipedia'])) return tools def initialize_agent(): llm = ChatOpenAI(model="gpt-4", temperature=0.1) prompt = hub.pull("hwchase17/openai-functions-agent") tools = get_function_tools() agent = create_openai_functions_agent(llm, tools, prompt) agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True) result = agent_executor.invoke({"input": "Who is the owner of Tesla company? Let me know details about owner."}) print(result) initialize_agent() ``` 此脚本展示了如何加载环境变量、初始化大型语言模型LLM)、设置提示模板、加载所需工具,并最终运行智能体以查询特斯拉公司所有者的信息[^3]。 #### 高级特性支持 对于更加复杂的场景需求,除了基础的功能外,还可以探索如下几个方向: - **定制化智能体**:允许用户根据实际业务情况设计专属的行为模式。 - **流式响应机制**:实现逐步返回计算结果的能力。 - **结构化输出管理**:确保最终的结果形式满足预期标准[^1]。 另外值得注意的是,在某些情况下可能还需要引入额外的服务接口作为扩展能力的一部分,比如天气预报插件就是这样一个典型的应用案例[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诸神缄默不语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值