使用 ChatPremAI 和 LangChain 构建高级聊天模型功能

## 使用 ChatPremAI 和 LangChain 构建高级聊天模型功能

### 技术背景介绍

随着生成式 AI 的快速发展,诸如 ChatGPT 等大型语言模型逐渐成为开发智能应用的核心组件。然而,如何高效利用这些模型,并将其部署到生产环境中,仍然是开发者面临的一大挑战。ChatPremAI 是一款整合所有核心功能的生成式 AI平台,通过与 LangChain 的完美结合,为开发者提供了灵活且功能强大的接口以实现复杂功能,诸如聊天补全、RAG(检索增强生成)和工具调用等。

本文将逐步讲解如何使用 LangChain 与 ChatPremAI 的 SDK 集成,以实现聊天模型的各种高级功能。

---

### 核心原理解析

1. **LangChain**:一个开源框架,专注于简化与大型语言模型 (LLMs) 的交互,尤其适合构建基于多模态、多工具和多资源的智能应用。
2. **ChatPremAI**:一个提供 "LaunchPad"(模型设置界面),以及原生 RAG 和模板管理功能的生成式 AI 平台,通过其 SDK 可以快速完成生产级的 LLM 功能开发。

---

### 代码实现演示

#### 安装和初始化

确保对以下库安装到您的环境中:
```bash
pip install premai langchain

接着,确保您已在 PremAI 平台 上注册并创建了一个项目,并获得了 API Key

引入所需模块并设置环境变量
import os
import getpass
from langchain_community.chat_models import ChatPremAI
from langchain_core.messages import HumanMessage, SystemMessage

# 设置 PremAI 的 API Key 环境变量
if os.environ.get("PREMAI_API_KEY") is None:
    os.environ["PREMAI_API_KEY"] = getpass.getpass("PremAI API Key:")

# 初始化 ChatPremAI 客户端
chat = ChatPremAI(project_id=1234, model_name="gpt-4o")  # 替换为实际 project_id 和模型名称

实现聊天补全功能

ChatPremAI 提供两种生成模式:invokestream

  1. 静态生成(invoke)

    human_message = HumanMessage(content="Who are you?")
    response = chat.invoke([human_message])
    print(response.content)
    

    输出示例:

    I am an AI language model created by OpenAI. How can I assist you today?
    
  2. 动态生成(stream)

    import sys
    
    for chunk in chat.stream("hello, what can you do?"):
        sys.stdout.write(chunk.content)
        sys.stdout.flush()
    

自定义系统提示词(System Prompt)

在需要动态调整系统提示时,可以直接覆盖默认的提示设置:

system_message = SystemMessage(content="You are a friendly assistant.")
human_message = HumanMessage(content="Who are you?")
response = chat.invoke([system_message, human_message])
print(response.content)

使用 RAG(检索增强生成)

PremAI 支持将外部文档库连接到生成模型,通过 Prem 平台的 Repository 功能管理文档库。

# 定义目标 Repository
repository_ids = [1985]  # 替换为实际的 Repository ID
repositories = dict(ids=repository_ids, similarity_threshold=0.3, limit=3)

# 在聊天中引入 RAG
query = "What are the uses of dense retrieval models?"
response = chat.invoke(query, repositories=repositories, max_tokens=100)
print(response.content)

模板管理(Prompt Templates)

PremAI 的模板功能支持在平台管理提示模板,并直接调用。

# 定义 HumanMessage,基于模板变量
human_messages = [
    HumanMessage(content="John", id="name"),
    HumanMessage(content="25", id="age"),
]

# 使用模板生成内容
template_id = "your-template-id"  # 替换为实际的模板 ID
response = chat.invoke(human_messages, template_id=template_id)
print(response.content)

使用工具调用(Tool/Function Calling)

通过工具调用,模型执行明确的函数逻辑。以下示例实现数学运算工具功能:

  1. 定义函数与工具

    from langchain_core.pydantic_v1 import BaseModel, Field
    from langchain_core.tools import tool
    
    # 定义工具参数 Schema
    class OperationInput(BaseModel):
        a: int = Field(description="First number")
        b: int = Field(description="Second number")
    
    # 定义加法和乘法工具
    @tool("add", args_schema=OperationInput)
    def add(a: int, b: int) -> int:
        return a + b
    
    @tool("multiply", args_schema=OperationInput)
    def multiply(a: int, b: int) -> int:
        return a * b
    
  2. 绑定工具到模型

    tools = [add, multiply]
    llm_with_tools = chat.bind_tools(tools)
    
    # 执行工具调用示例
    query = "What is the result of 8 * 7 and 12 + 18?"
    messages = [HumanMessage(content=query)]
    response = llm_with_tools.invoke(messages)
    print(response.content)
    

应用场景分析

  1. 智能客服:通过 RAG 功能将企业知识库引入生成模型,提供更高效且准确的用户支持。
  2. 教育助手:通过模板功能快速部署可复用的课程答疑助手。
  3. 工具型应用:利用工具调用功能,使模型能够完成如数学计算、数据查询等任务。

实践建议

  1. 合理配置系统提示:根据业务需求调整系统提示来控制模型行为。
  2. 优化 RAG 阈值:根据文档相似度调整 similarity_threshold 参数。
  3. 工具设计简洁:工具函数应具有明确的输入输出,以减少潜在错误。

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

你可能感兴趣的:(python)