langchain 入门指南(二)- 如何跟大模型对话

简介: langchain 入门指南(二)- 如何跟大模型对话

本文中,我们会通过一个简单的例子来展示如何使用 langchain 来调用大模型的 chat API(使用 Chat Model)。

这个例子前面也有使用过,但是前面还没有针对里面的内容进行详细的说明。

配置 key 的文档请看 langchain 入门指南(一)- 准备 API KEY

依赖安装

pip install -U langchain-openai

示例

下面的 ChatOpenAI 表示我们要使用的是 Chat Model,顾名思义,这个模型是用来进行对话的,这也是我们最常用的一种模型。

from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage
chat = ChatOpenAI(
    model="yi-large",
    temperature=0.3,
    max_tokens=200,
    api_key='your key',
    base_url="https://api.lingyiwanwu.com/v1"
)
messages = [
    SystemMessage(content="你是一名精通了 golang 的专家"),
    HumanMessage(content="写一个  golang 的 hello world 程序"),
]
response = chat.invoke(messages)
print(response.content)

ChatOpenAI 说明

使用 ChatOpenAI 类,我们可以调用 chat API。ChatOpenAI 类的构造函数有以下参数:

ChatOpenAI 参数

  • model:模型名称,例如 yi-large(零一万物),gpt-3.5-turbo(OpenAI HK)等。
  • temperature:用于控制生成文本的多样性,值越大,生成的文本越多样化。
  • max_tokens:生成文本的最大长度。(我们的输入和 LLM 的输出都需要消耗 token,所以如果只是测试,可以控制一下输出的 token 数量)
  • api_key:API 密钥(支持多种,不只是 OpenAI 的)。不填写的话,会从环境变量中读取(对应的环境变量是 OPENAI_API_KEY)。
  • base_url:API 的接口地址。不填写的话,会从环境变量中读取(对应的环境变量是 OPENAI_BASE_URL)。
  • timeout:超时时间,单位是秒。
  • max_retries: 最大重试次数。

invoke 方法的参数说明

我们可以看到上面的例子传递了一个 messages 参数,这个参数是一个列表,里面包含了 HumanMessageSystemMessage

在其他地方,我们可能会看到其他形式的参数,它实际上也支持很多种形式,例如:

元组列表
from langchain_openai import ChatOpenAI
chat = ChatOpenAI(
    model="yi-large",
    temperature=0.3,
    max_tokens=200,
    api_key='your key',
    base_url="https://api.lingyiwanwu.com/v1",
)
messages = [
    ('system', '你是一名精通了 golang 的专家'),
    ('human', '写一个  golang 的 hello world 程序')
]
response = chat.invoke(messages)
print(response.content)
BaseMessage 列表
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage
chat = ChatOpenAI(
    model="yi-large",
    temperature=0.3,
    max_tokens=200,
    api_key='your key',
    base_url="https://api.lingyiwanwu.com/v1",
)
messages = [
    SystemMessage(content="你是一名精通了 golang 的专家"),
    HumanMessage(content="写一个  golang 的 hello world 程序"),
]
response = chat.invoke(messages)
print(response.content)
字符串
from langchain_openai import ChatOpenAI
chat = ChatOpenAI(
    model="yi-large",
    temperature=0.3,
    max_tokens=200,
    api_key='your key',
    base_url="https://api.lingyiwanwu.com/v1",
)
# 这个字符串参数会被转换为 HumanMessage
response = chat.invoke('使用 golang 写一个 hello world 程序')
print(response.content)
字符串列表
from langchain_openai import ChatOpenAI
chat = ChatOpenAI(
    model="yi-large",
    temperature=0.3,
    max_tokens=200,
    api_key='your key',
    base_url="https://api.lingyiwanwu.com/v1",
)
messages = [
    "你是一名精通了 golang 的专家",
    "写一个  golang 的 hello world 程序",
]
response = chat.invoke(messages)
print(response.content)

invoke 方法的返回值

上面是直接打印了返回值的 content 属性,实际上返回值中包含了其他一些有用的信息:

{
  "lc": 1,
  "type": "constructor",
  "id": [
    "langchain",
    "schema",
    "messages",
    "AIMessage"
  ],
  "kwargs": {
    "content": "<...省略...>",
    "response_metadata": {
      "token_usage": {
        "completion_tokens": 200,
        "prompt_tokens": 35,
        "total_tokens": 235
      },
      "model_name": "yi-large",
      "system_fingerprint": null,
      "finish_reason": "length",
      "logprobs": null
    },
    "type": "ai",
    "id": "run-29131a4f-e792-4c9e-8cf5-490afed94176-0",
    "usage_metadata": {
      "input_tokens": 35,
      "output_tokens": 200,
      "total_tokens": 235
    },
    "tool_calls": [],
    "invalid_tool_calls": []
  }
}

一些字段说明:

  • completion_tokens/output_tokens 是生成的文本的 token 数量。
  • prompt_tokens/input_tokens 是输入的 token 数量。
  • total_tokens 是单次请求总的 token 数量。

在实际的应用中,我们需要注意使用的 token 的数量,防止消耗太多的 token,因为 token 是要花钱来购买的。

如果我们是为其他人提供服务,可能就需要针对不同的用户来统计 token 的使用情况,以便计费。


相关实践学习
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
目录
相关文章
|
10月前
|
人工智能 缓存 监控
使用LangChain4j构建Java AI智能体:让大模型学会使用工具
AI智能体是大模型技术的重要演进方向,它使模型能够主动使用工具、与环境交互,以完成复杂任务。本文详细介绍如何在Java应用中,借助LangChain4j框架构建一个具备工具使用能力的AI智能体。我们将创建一个能够进行数学计算和实时信息查询的智能体,涵盖工具定义、智能体组装、记忆管理以及Spring Boot集成等关键步骤,并展示如何通过简单的对话界面与智能体交互。
3579 1
|
10月前
|
机器学习/深度学习 人工智能 API
新手入门需要掌握多少种大模型才行
新手学大模型,重在掌握一类而非贪多。聚焦通用技能:提示词、思维链、API调用与模型评估。应用开发者精研1个闭源(如GPT)+1个开源(如Llama 3);研究者深入基座模型原理。少即是多,先精通再迁移,用框架(如LangChain)实现模型自由切换。目标是会用工具,而非背诵所有模型。
|
10月前
|
敏捷开发 人工智能 自动驾驶
AI大模型入门第四篇:借助RAG实现精准用例自动生成!
测试开发是否总被用例维护、漏测风险和文档滞后困扰?RAG技术让AI实时解读最新需求,自动生成精准测试用例,动态对齐线上数据,节省70%维护成本,助你告别手工“填坑”,高效应对需求变化。
|
11月前
|
人工智能 JavaScript 前端开发
​​大模型开发从入门到部署
本内容系统讲解大语言模型技术,涵盖BERT、GPT等主流架构,深入Transformer原理与自注意力机制,结合PyTorch实战,详解张量操作、自动求导与模型训练,并介绍RAG、Agent等典型应用场景,助你掌握AI核心技术。
1492 0
|
人工智能 数据库
智能体(AI Agent)开发实战之【LangChain】(四)结合大模型基于RAG实现本地知识库问答和纠错
本文介绍如何基于RAG实现知识库问答系统的输入内容纠错功能。通过加载本地知识库、构建向量数据库,结合大语言模型对输入文本进行检索比对与纠错优化,提升问答准确性。
|
人工智能 自然语言处理 数据挖掘
智能体(AI Agent)开发实战之【LangChain】(三)结合大模型基于RAG实现本地知识库问答优化
智能体(AI Agent)开发实战之【LangChain】(三)结合大模型基于RAG实现本地知识库问答优化
|
数据采集 存储 人工智能
智能体(AI Agent)开发实战之【LangChain】(二)结合大模型基于RAG实现本地知识库问答
智能体(AI Agent)开发实战之【LangChain】(二)结合大模型基于RAG实现本地知识库问答

热门文章

最新文章