快速上手LangChain(二)结合阿里通义langchian开发

阿里模型基础

阿里大模型服务平台百炼,官方文档:https://help.aliyun.com/zh/model-studio/user-guide/model-calling

模型选型建议

通义千问-Max、通义千问-Plus 和通义千问-Turbo 均适用于智能客服、文本创作(如撰写文稿、文案创作)、文本润色以及总结摘要等多种场景。如果您暂时不确定选择哪个模型,建议优先尝试使用通义千问-Plus,它在效果、速度和成本上相对均衡。

推理能力:通义千问-Max > 通义千问-Plus > 通义千问-Turbo

响应速度:通义千问-Turbo > 通义千问-Plus > 通义千问-Max

三个模型都兼容OpenAI 调用方式,相关细节请参考如何通过OpenAI接口调用通义千问模型。

消息类型

您通过API与大模型进行交互时的输入和输出也被称为消息(Message)。每条消息都属于一个角色(Role),角色包括系统(System)、用户(User)和助手(Assistant)。

系统消息(System Message,也称为System Prompt):用于告知模型要扮演的角色或行为。例如,您可以让模型扮演一个严谨的科学家等。默认值是“You are a helpful assistant”。您也可以将此类指令放在用户消息中,但放在系统消息中会更有效。

用户消息(User Message):您输入给模型的文本。

助手消息(Assistant Message):模型的回复。您也可以预先填写助手消息,作为后续助手消息的示例。

OpenAI 兼容

import os
from openai import OpenAI

try:
    client = OpenAI(
        # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx",
        # api_key=os.getenv("DASHSCOPE_API_KEY"),
        api_key="sk-xxx",
        base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
    )

    completion = client.chat.completions.create(
        model="qwen-plus",
        messages=[
            {'role': 'system', 'content': 'You are a helpful assistant.'},
            {'role': 'user', 'content': '你是谁?'}
            ]
    )
    print(completion.choices[0].message.content)
except Exception as e:
    print(f"错误信息:{e}")
    print("请参考文档:https://help.aliyun.com/zh/model-studio/developer-reference/error-code")

langchian开发前置基础

Chat models 聊天模型

官方文档:https://python.langchain.com/docs/concepts/chat_models/

现代 LLMs 通常通过聊天模型界面进行访问,该界面将消息列表作为输入,并返回消息作为输出。

最新一代的聊天模型(chat models)提供了额外的功能:

  • 工具调用:许多流行的聊天模型都提供原生工具调用 API。此 API 允许开发人员构建丰富的应用程序,使 LLMs 能够与外部服务、API 和数据库进行交互。工具调用还可用于从非结构化数据中提取结构化信息并执行各种其他任务。
  • 结构化输出:一种使聊天模型以结构化格式(例如与给定架构匹配的 JSON)响应的技术。
  • 多模态:能够处理文本以外的数据;例如,图像、音频和视频。

ps: 聊天模型是语言模型的一种变体,虽然它们在底层使用语言模型,但提供的接口不同,主要是以“聊天消息”作为输入和输出,而不是简单的“文本输入-文本输出”。

Integrations 集成

LangChain 有许多聊天模型集成,允许您使用来自不同提供商的各种模型。
这些集成是以下两种类型之一:

  • 官方模型:这些是 LangChain 和/或模型提供商官方支持的模型。您可以在 langchain- 软件包中找到这些模型。
  • 社区模型:有些模型主要由社区贡献和支持。您可以在 langchain-community 包中找到这些模型。

LangChain 聊天模型的命名约定是在其类名前加上 “Chat” 前缀(例如,ChatOllama、ChatAnthropic、ChatOpenAI 等)。

LangChain 也有较旧的 LLMs,它们不遵循聊天模型接口,而是使用将字符串作为输入并返回字符串作为输出的接口。这些模型通常不带 “Chat” 前缀(例如,Ollama、Anthropic、OpenAI 等)。这些模型实现了 BaseLLM 接口,并且可以用 “LLM” 后缀命名(例如,OllamaLLM、AnthropicLLM、OpenAILLM 等)。通常,用户不应使用这些模型

Interface 接口

LangChain 聊天模型实现了 BaseChatModel 接口。由于 BaseChatModel 还实现了 Runnable Interface,因此聊天模型支持标准流式处理接口、异步编程、优化批处理等。有关更多详细信息,请参阅 Runnable 接口

聊天模型的主要方法

聊天模型的主要方法包括:

  • invoke: The primary method for interacting with a chat model. It takes a list of messages as input and returns a list of messages as output.
    invoke:与聊天模型交互的主要方法。它采用消息列表作为输入,并返回消息列表作为输出。

  • stream: A method that allows you to stream the output of a chat model as it is generated.
    stream:一种方法,允许您在生成聊天模型时流式传输聊天模型的输出。

  • batch: A method that allows you to batch multiple requests to a chat model together for more efficient processing.
    batch:一种允许您将对聊天模型的多个请求一起批处理以实现更高效处理的方法。

  • bind_tools: A method that allows you to bind a tool to a chat model for use in the model’s execution context.
    bind_tools:一种方法,允许您将工具绑定到聊天模型,以便在模型的执行上下文中使用。

  • with_structured_output: A wrapper around the invoke method for models that natively support structured output.
    with_structured_output:本机支持结构化输出的模型的 invoke 方法的包装器。

其他重要方法可以在 BaseChatModel API 参考中找到

输入和输出

现代 LLMs 通常通过聊天模型接口进行访问,该接口将消息作为输入,并将消息作为输出返回。消息通常与一个角色(例如,“系统”、“人类”、“助手”)和一个或多个包含文本或潜在多模式数据(例如,图像、音频、视频)的内容块相关联。

LangChain 支持两种消息格式与聊天模型交互:

  1. LangChain 消息格式:LangChain 自带的消息格式,默认使用,LangChain 内部使用。
  2. OpenAI 的消息格式:OpenAI 的消息格式。

Standard parameters 标准参数

许多聊天模型都有可用于配置模型的标准化参数:

在这里插入图片描述

  • 标准参数仅适用于公开具有预期功能的参数的模型提供程序。例如,某些提供程序不会公开最大输出令牌的配置,因此这些提供程序不支持max_tokens。
  • 标准参数目前仅在具有自己的集成包(例如 langchain-openai、langchain-anthropic 等)的集成上强制执行,它们不对 langchain-community 中的模型强制执行。

聊天模型还接受特定于该集成的其他参数。要查找 Chat 模型支持的所有参数,请前往该模型的相应 API 参考。

Tool calling 工具调用

聊天模型可以调用工具来执行任务,例如从数据库获取数据、发出 API 请求或运行自定义代码。有关更多信息,请参阅工具调用指南

Structured outputs 结构化输出

可以请求聊天模型以特定格式(例如 JSON 或匹配特定架构)进行响应。此功能对于信息提取任务非常有用。请在结构化输出指南中阅读有关该技术的更多信息。

LangChain Python SDK

langchain分成不同的包:langchain-core、langchain-community和langchain

langchain包拆分为三个独立的包以改善开发人员体验

  • langchain-core包含已作为标准出现的简单核心抽象,以及作为将这些组件组合在一起的方式的 LangChain 表达式语言。
  • langchain-community包含所有第三方集成。独立的软件包。
  • langchain包含更高级别和特定于用例的链、代理和检索算法。
    在这里插入图片描述

langchain-community

pip install langchain-community

比如,我们要是 模型 qwen-plus ,我们就需要安装langchain-community

ChatTongyi 类

ChatTongyi 类旨在简化与 Tongyi Qwen 聊天模型的交互,允许用户发送消息并接收响应,支持同步和异步操作。它还支持流式响应、工具调用和结构化输出。

  • 类的实例化
    用户可以通过导入该类并创建对象来实例化它,指定所需的模型和参数。例如:
from langchain_community.chat_models import ChatTongyi  

tongyi_chat = ChatTongyi(  
    model="qwen-max",  
    # 其他参数...  
)
  • 同步调用:
    用户可以发送一系列消息,每条消息是一个包含发送者类型(“system” 或 “human”)和消息内容的元组。invoke 方法处理这些消息并返回 AI 消息对象。
messages = [  
    ("system", "你是一名专业的翻译家,可以将用户的中文翻译为英文。"),  
    ("human", "我喜欢编程。"),  
]  
response = tongyi_chat.invoke(messages)
  • 流式响应:
    stream 方法允许用户以块的形式接收响应,这对于长消息特别有用。
for chunk in tongyi_chat.stream(messages):  
    print(chunk)
  • 异步调用
    该类支持异步操作,使用 ainvoke 方法进行非阻塞调用。这在需要高响应性的应用中尤其有用。
await tongyi_chat.ainvoke(messages)
  • 工具调用
    该类可以将工具(使用 Pydantic 模型定义)绑定到聊天模型,以增强其功能。例如,用户可以定义获取天气或人口数据的工具,并在聊天中调用它们。
from pydantic import BaseModel, Field  

class GetWeather(BaseModel):  
    location: str  

chat_with_tools = tongyi_chat.bind_tools([GetWeather])  
ai_msg = chat_with_tools.invoke("今天哪个城市更热,哪个城市更大:洛杉矶还是纽约?")
  • 结构化输出
    该类可以返回结构化输出,通过定义 Pydantic 模型来指定期望的输出格式。这对于需要特定数据结构的应用非常有用。
class Joke(BaseModel):  
    setup: str  
    punchline: str  
    rating: Optional[int]  

structured_chat = tongyi_chat.with_structured_output(Joke)  
joke_response = structured_chat.invoke("给我讲一个关于猫的笑话")
  • 响应元数据
    response_metadata 属性提供有关响应的附加信息,例如模型名称、结束原因、请求 ID 和令牌使用统计信息。
ai_msg = tongyi_chat.invoke(messages)  
metadata = ai_msg.response_metadata

使用模型 qwen-plus demo

基本使用

pip install dashscope 

dashscope 是一个 API 客户端库,允许开发者与 Dashscope 平台进行交互。通过这个库,用户可以方便地调用各种 AI 模型,包括聊天、翻译、图像生成等功能。

安装 dashscope 和 langchain-community 是为了使用与阿里巴巴的 Tongyi Qwen 聊天模型相关的功能和工具。

总结
安装 dashscope 是为了能够访问和使用 Dashscope 平台上的 AI 模型。
安装 langchain-community 是为了利用其提供的工具和框架,快速构建基于语言模型的应用程序。

实例:

import os
from dotenv import load_dotenv
from langchain_community.chat_models import ChatTongyi

# 加载 .env 文件
load_dotenv()


api_base = os.getenv("PROXY")
api_key = os.getenv("API_KEY")

llm = ChatTongyi(
    model="qwen-plus",
    temperature=0,
    api_key=api_key,
    api_base=api_base,
    max_tokens=512,
)

messages = [
    ("system", ""),
    ("human", "你知道西京刀客是谁吗?"),
]
response = llm.invoke(messages)

print(response)

# for chunk in llm.stream("你知道西京刀客是谁吗?"):
#     print(chunk, end="", flush=False)

Tools

官方文档:https://python.langchain.com/docs/integrations/tools/

工具是设计为由模型调用的工具:它们的输入设计为由模型生成,其输出设计为传递回模型。

支持的在线搜索的工具: https://python.langchain.com/docs/integrations/tools/

使用 DuckDuckGo 进行搜索并将结果传递给 LangChain 模型

官方文档:https://python.langchain.com/docs/integrations/tools/ddg/

LangChain 确实提供了一些内置的工具,可以直接用于网页搜索。你可以使用 DuckDuckGo 或 SerpAPI 等工具来实现搜索功能。以下是如何使用 LangChain 中的 DuckDuckGo 搜索工具的示例。

pip install -U duckduckgo-search

注意:
警告提示直接从 langchain 导入工具已被弃用。你应该改为从 langchain-community 导入。更新你的导入语句如下:
新版本从langchain_community.tools 导入

from langchain_community.tools import DuckDuckGoSearchResults
import os
from dotenv import load_dotenv
from langchain_community.chat_models import ChatTongyi
from langchain_community.tools import DuckDuckGoSearchResults


# 加载 .env 文件
load_dotenv()

# 从环境变量中获取 API 配置
api_base = os.getenv("PROXY")
api_key = os.getenv("API_KEY")

# 初始化 DuckDuckGo 搜索工具
duckduckgo_tool = DuckDuckGoSearchResults()

# 初始化 ChatTongyi 模型
llm = ChatTongyi(
    model="qwen-plus",
    temperature=0,
    api_key=api_key,
    api_base=api_base,
    max_tokens=512,
)

# 用户查询
user_query = ("西京刀客是谁?")

# 使用 DuckDuckGo 搜索工具进行查询
search_results = duckduckgo_tool.run(user_query)
print(search_results)


# 处理搜索结果,提取相关信息
if search_results and 'RelatedTopics' in search_results:
    # 提取前几个结果的标题和链接
    context = "\n".join(
        [f"{topic['Text']}: {topic['FirstURL']}" for topic in search_results['RelatedTopics'] if 'Text' in topic and 'FirstURL' in topic]
    )
else:
    context = "没有找到相关结果。"

# 将搜索结果作为上下文传递给 ChatTongyi 模型
final_query = [
    {"role": "system", "content": "你是一个智能助手。"},
    {"role": "user", "content": f"根据以下信息回答问题:\n{context}\n\n问题:{user_query}"}
]

# 使用 invoke 方法生成响应
response = llm.invoke(final_query)

# 打印最终响应
print(response)
### LangGraph Qwen 使用指南 LangGraph 是一种用于构建复杂智能体应用程序的强大工具,能够简化自然语言处理(NLP)工作流中的多个环节[^1]。对于希望利用 LangGraph 和 Qwen 进行开发的技术人员来说,理解如何配置环境以及创建基本的应用程序至关重要。 #### 创建基于Qwen模型的代理 为了启动并运行一个简单的 LangGraph 应用程序,首先需要安装必要的库: ```bash pip install langchain qwen ``` 接着,在 Python 脚本中导入所需的模块,并初始化带有 Qwen 大规模语言模型(LLM)的服务实例: ```python from langchain_core.messages import HumanMessage from langgraph.prebuilt import create_react_agent import qwen # 导入qwen包 llm = qwen.Qwen() # 初始化Qwen LLM服务 tools = [...] # 配置所需工具列表 system_message = "You are a helpful assistant." # 设置系统消息 agent_executor = create_react_agent(llm, tools, messages_modifier=system_message) ``` 上述代码片段展示了如何通过 `create_react_agent` 函数快速搭建起一个具备反应能力的代理对象[^2]。此函数接收三个参数:大规模语言模型(`llm`)、一系列辅助功能(`tools`)及可选的消息修饰器(`messages_modifier`)用来定制化交互行为模式。 #### 执行对话循环 一旦成功建立了代理实体,则可以通过向其发送人类输入信息来进行互动交流: ```python human_input = HumanMessage(content="What is the weather like today?") response = agent_executor.run([human_input]) print(response.content) ``` 这段脚本模拟了一次完整的会话过程——从用户提问到最后接收到由 AI 自动生成的回答文本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

西京刀客

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

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

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

打赏作者

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

抵扣说明:

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

余额充值