2025-07-26 15:18:29
摘要:一、实现多格式文档解析器
1. 通用文档解析接口
我们先在ai文件夹创建一个名为parsers的pathon包,用来实现多格式文档解析器。
接着我们先定义一个解析器接口
# app/ai/parsers/base.py
from abc import ABC, abstractmethod
from typing import List, Dict, Any
from pydantic import BaseModel
class DocumentChunk(BaseModel):
文档块
content: str
metadata: Dict[str, Any]
chunk_index: int
class DocumentParser(ABC):
文档解析器抽象基类
@abstractmethod
def parse(self, file_path: str, file_content: bytes) - List[DocumentChunk]:
解析文档并返回文档块列表
pass
DocumentChunk是文档解析器返回类型。
DocumentParser是抽象基类,通过继承ABC来定义。
2. 实现文本解析器
# app/ai/parsers/txt_parser.py
from typing import List
from langchain_text_splitters import RecursiveCharacterTextSplitter
from app.ai.parsers.base import DocumentParser, DocumentChunk
class TextParser(DocumentParser):
文本文件解析器
def __init__(self, chunk_size: int = 1000, chunk_overlap: int = 200):
初始化文本解析器
Args:
chunk_size: 文档块大小
chunk_overlap: 文档块重叠大小
……
阅读全文
2025-07-19 15:02:32
摘要:上一篇我们已经实现了该项目的一些非AI功能的基础服务,如提供商、角色、会话等,本篇内容开始来实现AI部分的服务开发。
首先来实现一个AI聊天服务,然后在这些基础上将我们的AI聊天服务实现支持上传知识库。
一、实现AI聊天服务
AI聊天服务的功能很简单:就是通过我们提供的AI角色的信息, 对话的历史记录,已经用户发送过来的最新的信息,与大语言模型进行交互,生成回复内容。
AI聊天服务通过LangChain来实现。
1. 安装LangChain环境
uv add langchain langchain-openai
2. 实现AI聊天服务类
# app/ai/chat.py
from typing import List,AsyncGenerator
from langchain_core.messages import HumanMessage, AIMessage
from langchain_core.output_parsers import StrOutputParser
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder
from app.data.models import Role
from app.schemas.message import MessageBase, MessageRole
class AIChatService:
def __init__(self, role: Role):
# 创建ChatOpenAI实例
llm = ChatOpenAI(
base_url=role.provider.endpoint,
api_key=role.provider.api_key,
model=role.provider.model,
temperature=role.temperature,
streaming=True
)
# 构建Prompt模板
promp……
阅读全文
2025-07-12 14:39:31
摘要:一、项目介绍
1. 项目目标
Python + 面向单一用户 + 私有化部署 + 通用AI聊天平台
通过Web界面轻松交互
管理多个自定义AI角色
拥有会话管理能力
自由接入并切换语言模型(兼容OpenAl接口规范)
构建私有化知识库
扩展外部工具:集成MCP服务器
2. 功能性需求
多角色管理功能
对话管理功能
模型管理功能
RAG功能
前端界面(会话、知识库、模型设置、角色设置)
MCP 服务器接入
3. 技术选型
包与项目管理工具:NuGet+ dotnet cli == uv
后端API框架与服务器:ASP.NET Core Web APl(Kestrel) == FastAPl + Uvicorn
数据模型与验证:数据注解/FluentValidation == Pydantic
ORM + 数据迁移:EF Core == SQLAlchemy + Alembic
前端UI框架:Blazor Server == Gradio
元数据库(关系):PgSQL
向量数据库:Chroma
嵌入生成服务:云端向量服务 + 本地开源向量模型
AI组件:SK == LangChain
4. 项目架构
该项目采用分层架构(因为是第一个实例项目,没有采用领域驱动设计)
二、项目初始化
安装UV
# https://docs.astral.sh/uv/getting-started/installation/#__tabbed_1_2
pip install uv
# uv的依赖环境恢复可以使用 uv sync
创建UV项目
项目初始化
创建app和ui文件夹,按下面目录结构分别创建Python软件包和文件:
app
|--ai
|--api
|--data
|--|--models
|--schemas
|--service
|--.env
|--config.py
|--main.py
ui
安装 fastapi
uv add fastapi
安装 uvicorn
uv add uvicorn
创建HelloWorld API
# app/api/hello.py
# 从 fastapi 库中导入 APIRouter 类,用于创建路由模块
from fastapi import APIRouter
# 创建一个 ……
阅读全文