使用Log10进行LangChain调用的日志记录与调试

技术背景介绍

在进行AI模型调用时,尤其是使用LangChain时,我们经常需要对调用过程进行日志记录和调试,以便分析和优化调用的效果。Log10 是一个开源的无代理 LLM 数据管理和应用开发平台,让我们可以记录、调试和标记 LangChain 调用,从而更便捷地进行模型调用的管理。

核心原理解析

Log10通过提供一系列的回调函数,集成到LangChain中,从而实现对每次调用的日志记录和调试功能。它可以帮助开发者更好地理解模型的行为,快速发现并解决问题。

代码实现演示

环境变量配置

首先,请在创建Log10账户后,在环境变量中设置以下变量:

  • LOG10_TOKENLOG10_ORG_ID
  • LOG10_URL=https://log10.io
  • OPENAI_API_KEYANTHROPIC_API_KEY

这些变量在设置账户时可以从Settings和Organization标签页中获取。

LangChain调用日志记录

下面是一个使用Log10进行LangChain调用日志记录的示例代码:

from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage
from log10.langchain import Log10Callback
from log10.llm import Log10Config

# 初始化Log10回调函数
log10_callback = Log10Callback(log10_config=Log10Config())

# 定义消息列表
messages = [
    HumanMessage(content="You are a ping pong machine"),
    HumanMessage(content="Ping?"),
]

# 创建LangChain模型实例并添加回调函数
llm = ChatOpenAI(model="gpt-3.5-turbo", callbacks=[log10_callback])

# 预测消息
completion = llm.predict_messages(messages)
print(completion)

使用标签

为每次调用添加标签可以帮助我们更好地管理和筛选日志。下面是一个带有标签的示例代码:

from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage
from log10.langchain import Log10Callback
from log10.llm import Log10Config

# 初始化Log10回调函数
log10_callback = Log10Callback(log10_config=Log10Config())

# 定义消息列表
messages = [
    HumanMessage(content="You are a ping pong machine"),
    HumanMessage(content="Ping?"),
]

# 创建LangChain模型实例并添加标签
llm = ChatOpenAI(model="gpt-3.5-turbo", callbacks=[log10_callback], temperature=0.5, tags=["test"])
completion = llm.predict_messages(messages, tags=["foobar"])
print(completion)

LangChain与OpenAI API混用

我们还可以将直接的OpenAI调用与LangChain调用混用,并使用Log10记录日志:

import os
from log10.load import log10, log10_session
import openai
from langchain_openai import OpenAI

# 初始化Log10
log10(openai)

# 使用标签记录会话
with log10_session(tags=["foo", "bar"]):
    # 直接调用OpenAI API
    response = openai.Completion.create(
        model="text-ada-001",
        prompt="Where is the Eiffel Tower?",
        temperature=0,
        max_tokens=1024,
        top_p=1,
        frequency_penalty=0,
        presence_penalty=0,
    )
    print(response)

    # 通过LangChain调用
    llm = OpenAI(model_name="text-ada-001", temperature=0.5)
    response = llm.predict("You are a ping pong machine.\nPing?\n")
    print(response)

应用场景分析

通过Log10对LangChain调用进行日志记录,主要适用于以下几个场景:

  1. 调试模型调用:快速发现调用中的问题,提高开发效率。
  2. 调用分析:记录调用数据,分析模型的表现和改进点。
  3. 调用分类:通过标签管理调用,更好地组织和查找日志。

实践建议

  • 合理使用标签:给不同类型的调用添加标签,有助于后续的筛选和分析。
  • 定期检查日志:及时检查记录的日志,发现并解决潜在问题。
  • 结合具体需求调试:根据具体的业务需求进行调试,优化调用效果。

如果遇到问题欢迎在评论区交流。

—END—

<think>好的,我现在要帮用户解答关于DeepSeek-R1部署完成后如何使用的问题。首先,我需要回顾之前的对话历史,看看用户之前的问题是什么。用户之前问过关于将显卡升级到4060 Ti是否可行以及token生成速度的问题,这说明用户可能在本地部署大语言模型,并且对硬件性能比较关注。现在用户已经部署好了DeepSeek-R1,想知道如何使用。 首先,我需要确定DeepSeek-R1是什么。根据名称,这可能是一个由深度求索(DeepSeek)公司开发的大语言模型,类似于LLaMA或者GPT。用户可能是在本地或者云端部署了这个模型,现在需要基本的使用方法、API调用、调优技巧等。 接下来,用户的使用场景可能是开发者或者研究人员,想要在本地运行模型进行测试或开发应用。因此,我需要涵盖基本的交互方式,比如命令行、API接口,以及可能的集成方法,比如LangChain。此外,用户可能关心如何优化性能,比如使用量化模型,或者调整生成参数如temperature和max_tokens。 用户可能没有明确提到的深层需求包括如何监控模型性能,处理多轮对话,以及进行模型微调。这些可能是进阶使用的重要部分,需要包含在回答中。同时,用户之前提到过显卡升级,可能需要强调如何利用GPU资源来提升推理速度,比如使用CUDA加速。 我需要确保回答结构清晰,分步骤说明,涵盖基础交互、API调用、参数调整、高级功能(如微调、多模态处理)、性能优化和常见问题。可能还需要提供示例代码,比如Python调用API的示例,或者量化模型的命令,这样用户可以直接参考使用。 另外,需要注意用户可能使用的是Windows环境,之前的问题提到过Windows环境下的部署,所以在路径示例中使用反斜杠,或者在性能优化部分提到CUDA和DirectML的配置。同时,用户可能有成本效益的考虑,所以优化推理速度和省电的配置建议也是有必要的。 最后,要检查是否有遗漏的部分,比如安全建议,比如API密钥的管理,或者模型版本的选择。确保回答全面,同时避免过于技术化,保持易懂,但也要提供足够细节供用户深入操作。</think>以下是关于**DeepSeek-R1**模型部署后的完整使用指南,涵盖从基础操作到高级功能的实践建议: --- ### 一、基础交互模式 #### 1. 命令行直接调用(推荐给开发者) ```bash # 启动交互式对话(假设使用transformers库) from transformers import AutoModelForCausalLM, AutoTokenizer model = AutoModelForCausalLM.from_pretrained("./deepseek-r1") tokenizer = AutoTokenizer.from_pretrained("./deepseek-r1") while True: input_text = input("User: ") inputs = tokenizer(input_text, return_tensors="pt") outputs = model.generate(**inputs, max_new_tokens=200) print("AI:", tokenizer.decode(outputs[0], skip_special_tokens=True)) ``` #### 2. Gradio WebUI(适合非技术用户) ```python # 安装依赖:pip install gradio import gradio as gr def respond(message, history): inputs = tokenizer(message, return_tensors="pt") outputs = model.generate(**inputs, max_new_tokens=300) return tokenizer.decode(outputs[0], skip_special_tokens=True) gr.ChatInterface(respond).launch(server_port=7860) ``` 访问 `http://localhost:7860` 即可使用可视化界面 --- ### 二、API服务化部署 #### 1. 启动FastAPI服务 ```python from fastapi import FastAPI from pydantic import BaseModel app = FastAPI() class Query(BaseModel): prompt: str max_tokens: int = 200 @app.post("/generate") async def generate_text(query: Query): inputs = tokenizer(query.prompt, return_tensors="pt") outputs = model.generate(**inputs, max_new_tokens=query.max_tokens) return {"response": tokenizer.decode(outputs[0])} ``` 启动命令:`uvicorn api:app --reload --port 8000` #### 2. 调用示例(cURL) ```bash curl -X POST "http://localhost:8000/generate" \ -H "Content-Type: application/json" \ -d '{"prompt": "如何做蛋炒饭?", "max_tokens": 300}' ``` --- ### 三、关键参数调优 | 参数名 | 推荐值范围 | 作用说明 | 性能影响 | |--|------------------------| | `temperature` | 0.7-1.2 | 控制输出随机性(值越高越创意) | 高温可能降低输出连贯性 | | `top_p` | 0.85-0.95 | 核采样阈值 | 平衡多样性相关性 | | `repetition_penalty` | 1.0-1.2 | 抑制重复内容 | 过高会导致语句碎片化 | | `num_beams` | 3-5 | 集束搜索宽度 | 提升质量但增加计算量 | **优化配置示例**: ```python outputs = model.generate( **inputs, max_new_tokens=400, temperature=0.9, top_p=0.9, repetition_penalty=1.1, num_beams=4 ) ``` --- ### 四、高级功能开发 #### 1. 多轮对话管理 ```python from transformers import Conversation conversation = Conversation() while True: user_input = input("User: ") conversation.add_user_input(user_input) model_output = model.generate( conversation, max_length=1000, pad_token_id=tokenizer.eos_token_id ) conversation.mark_processed() print("AI:", conversation.generated_responses[-1]) ``` #### 2. 长文本处理(支持16K上下文) ```python # 启用FlashAttention优化 model = AutoModelForCausalLM.from_pretrained( "./deepseek-r1", attn_implementation="flash_attention_2" ) # 分块处理长文本 def process_long_text(text, chunk_size=2048): chunks = [text[i:i+chunk_size] for i in range(0, len(text), chunk_size)] for chunk in chunks: yield model.generate(**tokenizer(chunk, return_tensors="pt")) ``` --- ### 五、性能优化技巧 #### 1. 量化加速(RTX 4060 Ti适用) ```bash # 使用AutoGPTQ量化(需先安装optimum) python -m optimum.exporters.gptq deepseek-r1 \ --quant-bits 4 \ --quant-group-size 128 \ --act-order ``` #### 2. GPU显存优化配置 ```python # 混合精度推理(节省30%显存) model.half().cuda() # 启用PagedAttention(需vLLM支持) from vllm import LLM llm = LLM(model="./deepseek-r1", tensor_parallel_size=1) ``` --- ### 六、监控调试 #### 1. 实时性能看板 ```bash # 使用nvitop监控GPU状态 nvitop -m full # 日志记录建议格式 import logging logging.basicConfig( filename='deepseek.log', format='%(asctime)s - %(levelname)s - %(message)s', level=logging.INFO ) ``` #### 2. 常见错误处理 | 错误类型 | 解决方案 | 预防措施 | |--|------------------------------|----------------------------| | CUDA内存不足 | 启用`memory_efficient_attention` | 降低`max_tokens`值 | | 文本重复循环 | 增加`repetition_penalty` | 设置`no_repeat_ngram_size=3` | | 生成结果不符合预期 | 调整`temperature`和`top_p` | 添加system prompt约束 | --- ### 七、安全建议 1. API访问控制 ```python # 添加API密钥验证 from fastapi.security import APIKeyHeader api_key_header = APIKeyHeader(name="X-API-Key") async def check_api_key(key: str = Depends(api_key_header)): if key != "YOUR_SECRET_KEY": raise HTTPException(status_code=403, detail="Invalid API Key") ``` 2. 内容过滤机制 ```python # 安装:pip install profanity-filter from profanity_filter import ProfanityFilter pf = ProfanityFilter() def sanitize_output(text): return pf.censor(text) ``` --- **扩展建议**:对于企业级部署,建议结合Ray框架实现分布式推理,单个RTX 4060 Ti可支持约15-20并发请求(Q4量化下)。若需处理多模态任务,可参考OpenAI的CLIP架构扩展图像理解能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值