大模型学习笔记七:LLM应用

本文详述了维护生产级别LLM应用的关键任务,包括指标监控、Prompt调试与测试。介绍了LangFuse、LangSmith和Prompt Flow等工具的使用,涉及数据集管理、评估函数、Prompt版本管理和句子相似性比较等方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、维护生产级别的LLM应用,需要做的事

1、各种指标监控与统计:访问记录、响应时长、Token用量、计费等等(系统各个模块的访问记录和响应时间,整体的费用)
2、调试 Prompt
3、测试/验证系统的相关评估指标
4、数据集管理(便于回归测试,看以往测试的结果)
5、Prompt 版本管理(便于升级/回滚)

二、符合需求的LLM App维护平台

1、LangFuse(重点)): 开源 + SaaS(免费/升级版付费),LangSmith 平替,可集成 LangChain 也可直接对接 OpenAI API;
2、 LangSmith: LangChain 的官方平台,SaaS 服务(付费),非开源;
3、 Prompt Flow:微软开发,开源 + Azure AI云服务,可集成 Semantic Kernel(但貌合神离)。

import os
os.environ["LANGCHAIN_TRACING_V2"]=""
os.environ["LANGCHAIN_API_KEY"]=""

三、LangFuse

1)替换OpenAI客户端(把跟OpenAI交互记录到LangFuse)

  • 简介
    1、开源,支持 LangChain 集成或原生 OpenAI API 集成
    2、官方网站:https://langfuse.com/
    3、项目地址:https://github.com/langfuse

  • 注册(通过官方云服务使用:)

注册: cloud.langfuse.com
创建 API Key

LANGFUSE_SECRET_KEY="sk-lf-..."
LANGFUSE_PUBLIC_KEY="pk-lf-..."
  • 部署(源码部署)
#1、Clone repository
git clone https://github.com/langfuse/langfuse.git
cd langfuse
 
# 2、Run server and db
docker compose up -d


# 3、在自己部署的系统中生成上述两个 KEY
# 并在环境变量中指定服务地址
LANGFUSE_SECRET_KEY="sk-lf-..."
LANGFUSE_PUBLIC_KEY="pk-lf-.."
LANGFUSE_HOST="http://localhost:3000"
  • 安装相关库
!pip install --upgrade langfuse
  • 开始替换OpenAI客户端
from datetime import datetime
from langfuse.openai import openai
from langfuse import Langfuse 
import os

trace = Langfuse().trace(
    name = "hello-world",
    user_id = "wzr",
    release = "v0.0.1"
)

completion = openai.chat.completions.create(
  name="hello-world",
  model="gpt-3.5-turbo",
  messages=[
      {
   "role": "user", "content": "对我说'Hello, World!'"}
  ],
  temperature=0,
  trace_id=trace.id,
)

print(completion.choices[0].message.content)
  • 回复
Hello, World!
  • 该回答的记录
    在这里插入图片描述

  • 提问记录
    在这里插入图片描述

1.1)几个基本概念

1、·Trace 一般表示用户与系统的一次交互,其中记录输入、输出,也包括自定义的 metadata 比如用户名、session id等;
2、一个 trace 内部可以包含多个子过程,这里叫 observarions;
3、Observation 可以是多个类型:

  • Event 是最基本的单元,用于记录一个 trace 中的每个事件;
  • Span 表一个 trace 中的一个"耗时"的过程;
  • Generation 是用于记录与 AI 模型交互的 span,例如:调用 embedding 模型、调用 LLM。

4、Observation 可以嵌套使用。

  • 举例
    在这里插入图片描述

2)通过LangChain的回调函数触发记录(上面用的原生OpenAI接口,下面是调用LangChain的接口)

from langfuse.callback import CallbackHandler

handler = CallbackHandler(
    trace_name="SayHello",
    user_id="wzr",
)

---------------------------------------
from langchain.prompts import (
    ChatPromptTemplate,
    HumanMessagePromptTemplate,
)
from langchain_core.output_parsers import StrOutputParser
from langchain_openai import ChatOpenAI
from langchain_core.runnables import RunnablePassthrough

model = ChatOpenAI(model="gpt-3.5-turbo-0613")

prompt = ChatPromptTemplate.from_messages([
    HumanMessagePromptTemplate.from_template("Say hello to {input}!") 
])


# 定义输出解析器
parser = StrOutputParser()

chain = (
    {
   "input":RunnablePassthrough()} 
    | prompt
    | model
    | parser
)
chain.invoke(input="AGIClass", config={
   "callbacks":[handler]})
  • 回复打印
'Hello AGIClass! How can I assist you today?'

3)构建一个实际应用

  • 需求
    1、根据课程内容,判断学生问题是否需要老师解答
    2、判断该问题是否需要老师解答,回复’Y’或’N’
    3、判断该问题是否已有同学问过
#1、构建 PromptTemplate
from langchain.prompts import PromptTemplate

need_answer=PromptTemplate.from_template("""
*********
你是AIGC课程的助教,你的工作是从学员的课堂交流中选择出需要老师回答的问题,加以整理以交给老师回答。
 
课程内容:
{outlines}
*********
学员输入:
{user_input}
*********
如果这是一个需要老师答疑的问题,回复Y,否则回复N。
只回复Y或N,不要回复其他内容。""")

check_duplicated=PromptTemplate.from_template("""
*********
已有提问列表:
[
{question_list}
]
*********
新提问:
{user_input}
*********
已有提问列表是否有和新提问类似的问题? 回复Y或N, Y表示有,N表示没有。
只回复Y或N,不要回复其他内容。""")

outlines="""
LangChain
模型 I/O 封装
模型的封装
模型的输入输出
PromptTemplate
OutputParser
数据连接封装
文档加载器:Document Loaders
文档处理器
内置RAG:RetrievalQA
记忆封装:Memory
链架构:Chain/LCEL
大模型时代的软件架构:Agent
ReAct
SelfAskWithSearch
LangServe
LangChain.js
"""

question_list=[
    "LangChain可以商用吗",
    "LangChain开源吗",
]

#2、创建 chain
model = ChatOpenAI(temperature=0,model_kwargs={
   "seed":42})
parser = StrOutputParser()

chain1 = (
    need_answer
    | model
    | parser
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值