如何攻克LLM应用的调试?教你本地化部署与使用一款免费的LLM应用工程化平台

随着LLM应用的不断成熟,特别是在B端企业场景中的逐渐落地,其不再停留在原型与验证阶段,将面临着更高的工程化要求,无论是输出的稳定性、性能、以及成本控制等,都需要实现真正的“生产就绪”;但由于大量的应用基于LangChain、LlamaIndex等框架开发,更多的抽象与封装使得应用难以跟踪与调试。因此,借助一个独立且侵入性较小的工程化平台来捕获LLM应用内部细节,帮助排障、优化与测试是很有必要的

本文将手把手教你使用一个开源的LLM应用工程化平台:Langfuse,与在线且收费的LangSmith不同,它支持完全本地化部署与使用,与应用集成也很简单。

  • **快速本地化部署
    **

  • 与LangChain应用集成

  • 与普通LLM应用集成

PART 1

快速本地化部署

WHAT HAPPENED IN MAY

Langfuse是一个开源的LLM应用的工程平台,可以帮助开发者及团队进行集中、在线、协作的LLM应用跟踪调试、分析与测试评估。

  • **跟踪调试:**跟踪应用执行过程、上下文、LLM调用与成本、用户反馈等

  • **提示管理:**集中的Prompt模板创建、维护与版本管理

  • **监控分析:**调用统计、模型使用、tokens成本、响应延迟、评分统计等

  • **测试评估:**基于LLM与用户反馈的评估,包括质量、风格、内容安全

基于LLM的自动化评估目前在开源版本暂不支持,云端商业版本可以内测。

方法一:docker compose快速启动

适合个人开发者、对数据保存要求不高的开发团队。这种模式下会自动启动postgres的独立docker,只需三步:

#下载代码  
git clone https://github.com/langfuse/langfuse.git  
  
#进入代码目录  
cd langfuse  
  
#一键获取并启动docker容器  
docker compose up

方法二:独立数据库 + docker run

适合有更高数据保存要求的开发团队,或者有现成的Postgres数据库。这种模式下,需要首先自行安装并启动postgres数据库,如果还没有Postgres,可进入官网(https://www.postgresql.org/),下载、安装并配置启动。记录下数据库的连接URL。然后执行以下命令:

#拉取最新镜像  
docker pull langfuse/langfuse:latest  
  
#注意替换这里的DATABASE_URL为你的postgres url  
docker run --name langfuse \  
-e DATABASE_URL=postgresql://hello \  
-e NEXTAUTH_URL=http://localhost:3000 \  
-e NEXTAUTH_SECRET=mysecret \  
-e SALT=mysalt \  
-p 3000:3000 \  
-a STDOUT \  
langfuse/langfuse

方法三:本地开发部署

除非你需要对Langfuse做个性化定制,或者使用Langfuse展开商业运营,否则不建议采用这种方式。具体请参考项目中CONTRIBUTING.md文件说明。

健康检查与测试

完成部署后,运行如下命令进行健康检查:

#健康测试,在本机运行  
curl http://localhost:3000/api/public/health

登录Langfuse UI使用

访问如下地址,登录langfuse的管理UI,出现登录界面就大功告成:

http://你的服务器地址:3000/

可能的问题

  • 容器启动失败:检查网络是否连通;3000端口是否被占用;数据库是否正常

  • 无法远程访问:检查安全端口是否放行;localhost修改为0.0.0.0试试

  • 数据库无法连接:数据库端口是否放行;database_url是否有特殊字符

PART 2

与LangChain应用集成

WHAT HAPPENED IN MAY

平台已经就绪,现在需要让应用与Langfuse集成起来,以能够跟踪、评估与分析我们的应用。使用Langfuse的SDK/API,Langfuse能够与现有的任意应用做集成,但如果你的应用是基于LangChain、LlamaIndex这样的开发框架,那么使用起来会更加方便,这里先介绍与LangChain应用集成。

【准备工作】

在开始之前,首先登录到Langfuse UI,创建一个Project,然后在Settings中生成API Keys,参考下图**:**

然后把图中三个参数设置到本地环境变量:

os.environ["LANGFUSE_PUBLIC_KEY"] = "pk-***"  
os.environ["LANGFUSE_SECRET_KEY"] = "sk-***"  
os.environ["LANGFUSE_HOST"] = "http://localhost:3000"

最后,安装Langfuse的SDK,以Python为例(也支持NodeJS):

pip install langfuse

【给应用增加Trace功能】

我们用Langchain构建了一个简单的RAG应用,使用了本地的Ollama模型和OpenAI的嵌入模型。现在只需要增加红色的三行代码即可:



...此处省略import必要的模块....

from langfuse.callback import CallbackHandler  
langfuse\_handler = CallbackHandler(session\_id=str(uuid.uuid4()))  
  
#模型  
llm = Ollama(model="qwen:14b")  
embed\_model = OpenAIEmbeddings(model="text-embedding-3-small")  
  
#构建向量索引  
documents = DirectoryLoader('./data/', glob="\*.txt",loader\_cls=TextLoader).load()  
splits = RecursiveCharacterTextSplitter(chunk\_size=200, chunk\_overlap=0).split\_documents(documents)  
db = FAISS.from\_documents(splits, embed\_model)  
retriever = db.as\_retriever()  
  
#prompt  
prompt = ChatPromptTemplate.from\_template("基于如下上下文:\\n\\n{context}\\n\\n请回答以下问题:\\n\\n{question}")  
  
#chain  
rag\_chain = (  
    {"context": retriever | (lambda docs: "\\n\\n".join(doc.page\_content for doc in docs)), "question": RunnablePassthrough()}  
    | prompt  
    | llm  
    | StrOutputParser()  
)  
  
#对话  
while True:  
    user\_input = input("问题:")  
    if user\_input.lower() == "exit":  
        break  
    if user\_input.lower() == "":  
        continue  
    response = rag\_chain.invoke(user\_input,

                                config={"callbacks":\[langfuse\_handler\]})

    print("AI:", response)


注意这里在每次运行时生成一个session_id,是用来将多次trace组织到一次session中(Langfuse跟踪的基本单位是Session->Trace->Observation,而调用LLM就是Observation的一种类型)。

现在我们来运行程序,做3次对话,然后回到Langfuse UI观察Tracing菜单下的跟踪记录,可以看到3条trace记录,且有相同的session_id:

点击一条trace记录,就可以追踪到详细的RAG运行过程,从检索到组装的Prompt、LLM生成,多个步骤的关系以及输入输出、延时、model使用、tokens等

由于使用了session来组织多个trace,我们可以在session菜单中查看这次session的完整会话过程

【使用Prompts管理功能】

如果在一个团队开发中,需要对所有的Prompt进行集中管理与维护,可以利用Langfuse的Pormpts管理功能。这里我们通过Langfuse UI的Prompts菜单新增一个RAG的简单提示模板:

现在可以在应用中使用这个模版,只需要把上述代码中的创建prompt的部分修改为用以下方式从Langfuse获取模板即可:

#prompt  
from langfuse import Langfuse  
langfuse=Langfuse()  
prompt_str = langfuse.get_prompt("RAG").get_langchain_prompt()  
prompt = PromptTemplate(template=prompt_str, input_variables=["context","question"])

Prompts管理支持设置变量、版本管理与标签,可实现灵活控制。

【使用评分功能】

为了对生产级的LLM应用做持续改进与优化,通过评分(score)来对应用输出质量作评估是有必要的。在Langfuse中支持多种评分途径:

  • 在Langfuse UI中手工评分

  • 在Langfuse UI中借助LLM做自动评估

  • 通过SDK做自定义评分或搜集用户评分

这里的方式1应用场景有限,方式2目前仅在cloud版本中内测,因此这里介绍第3种,其最常见的场景是在应用端搜集用户反馈评分,然后上报Langfuse平台。为了实现评分上报,需要对上述代码中的invoke部分做如下改造:

from langfuse.decorators import langfuse_context, observe      #测试代码   @observe()   def invoke(query):       langfuse_context.update_current_trace(session_id=session_id)       langfuse_handler = langfuse_context.get_current_langchain_handler()       response = chain.invoke(query,config={"callbacks":[langfuse_handler]})   `    `#此处模拟搜集到用户评分,如0.8    langfuse_context.score_current_trace(           name="feedback-on-trace",           value=0.8,           comment="用户反馈",       )       return response["result"]

这里把上述代码中的invoke包装成独立函数,然后增加observe()装饰器,以获得对trace控制的langfuse_context对象;再通过score_current_trace方法上报本次评分。成功后,用户的每次反馈评分都可以在LangfuseUI的scores菜单中看到,并且可以在dashboard看到相关统计指标,后续可以根据这些指标进行针对性优化:

【分析仪表盘】

Langfuse的Dashboard默认展示很多有用的分析与统计指标,包括Trace的统计、模型成本分析、评分统计、不同类型环节的响应延迟等,非常适合用来帮助应用优化(为了能正确统计商业模型成本,注意在models菜单中做模型价格对齐):

PART 3

与普通LLM应用的集成

WHAT HAPPENED IN MAY

除了Langchain框架以外,Langfuse还支持与另外一种常用框架LlamaIndex的快速集成。但如果你的应用直接基于大模型的SDK开发,并且有着较复杂的控制流程,也能采用Langfuse的低层SDK来实现集成。这里用一个简单的与本地Ollama模型对话的小应用来展示集成方式:

# ....省略import模块....   session_id = str(uuid.uuid4())      #LLM调用采用generation的type,不会产生新的trace,只会产生observation   @observe(as_type="generation")   def call_llm(query):`    `response = ollama.chat(model='qwen:14b', messages=[         {           'role': 'user',           'content': query,         },       ])       return response['message']['content']` `#这里不指定type,每次调用产生一个trace;不直接放llm调用逻辑是为了把LLM调用的observation分离``@observe()   def invoke(query):`    `#用session_id把多次trace组织起来    langfuse_context.update_current_trace(                   session_id=session_id)       return call_llm(query)      def main():     while True:         user_input = input("问题:")         if user_input.lower() == "exit":             break         if user_input.lower() == "":             continue            print("AI:", invoke(user_input))`  `#结束前flush缓存,防止漏上报     langfuse_context.flush()   main()

这里使用@observe装饰器来实现函数输入输出与LLM生成的跟踪,实际使用时,也可以使用langfuse.trace自行创建trace,并上报自定义的跟踪信息,虽然较为繁琐,但控制会更灵活。具体可以参考官方SDK文档。

【结束语】

整体使用下来Langfuse功能与LangSmith类似,但胜在开源可本地化部署,集成简单,且对应用性能影响很小(数据上报都是异步)。更多功能大家可自行部署并探索,有任何问题,欢迎关注与交流。

如何系统的去学习大模型LLM ?

作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。

但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料 包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来

😝有需要的小伙伴,可以V扫描下方二维码免费领取🆓

在这里插入图片描述

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

在这里插入图片描述

四、AI大模型商业化落地方案

img

阶段1:AI大模型时代的基础理解

  • 目标:了解AI大模型的基本概念、发展历程和核心原理。
  • 内容
    • L1.1 人工智能简述与大模型起源
    • L1.2 大模型与通用人工智能
    • L1.3 GPT模型的发展历程
    • L1.4 模型工程
      - L1.4.1 知识大模型
      - L1.4.2 生产大模型
      - L1.4.3 模型工程方法论
      - L1.4.4 模型工程实践
    • L1.5 GPT应用案例

阶段2:AI大模型API应用开发工程

  • 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
  • 内容
    • L2.1 API接口
      - L2.1.1 OpenAI API接口
      - L2.1.2 Python接口接入
      - L2.1.3 BOT工具类框架
      - L2.1.4 代码示例
    • L2.2 Prompt框架
      - L2.2.1 什么是Prompt
      - L2.2.2 Prompt框架应用现状
      - L2.2.3 基于GPTAS的Prompt框架
      - L2.2.4 Prompt框架与Thought
      - L2.2.5 Prompt框架与提示词
    • L2.3 流水线工程
      - L2.3.1 流水线工程的概念
      - L2.3.2 流水线工程的优点
      - L2.3.3 流水线工程的应用
    • L2.4 总结与展望

阶段3:AI大模型应用架构实践

  • 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
  • 内容
    • L3.1 Agent模型框架
      - L3.1.1 Agent模型框架的设计理念
      - L3.1.2 Agent模型框架的核心组件
      - L3.1.3 Agent模型框架的实现细节
    • L3.2 MetaGPT
      - L3.2.1 MetaGPT的基本概念
      - L3.2.2 MetaGPT的工作原理
      - L3.2.3 MetaGPT的应用场景
    • L3.3 ChatGLM
      - L3.3.1 ChatGLM的特点
      - L3.3.2 ChatGLM的开发环境
      - L3.3.3 ChatGLM的使用示例
    • L3.4 LLAMA
      - L3.4.1 LLAMA的特点
      - L3.4.2 LLAMA的开发环境
      - L3.4.3 LLAMA的使用示例
    • L3.5 其他大模型介绍

阶段4:AI大模型私有化部署

  • 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
  • 内容
    • L4.1 模型私有化部署概述
    • L4.2 模型私有化部署的关键技术
    • L4.3 模型私有化部署的实施步骤
    • L4.4 模型私有化部署的应用场景

学习计划:

  • 阶段1:1-2个月,建立AI大模型的基础知识体系。
  • 阶段2:2-3个月,专注于API应用开发能力的提升。
  • 阶段3:3-4个月,深入实践AI大模型的应用架构和私有化部署。
  • 阶段4:4-5个月,专注于高级模型的应用和部署。
这份完整版的大模型 LLM 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

😝有需要的小伙伴,可以Vx扫描下方二维码免费领取🆓

在这里插入图片描述

  • 14
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值