# 假设我们正在为一个名为 "my_awesome_package" 的包定义其基本信息 package_name = "my_awesome_package" package_version = "0.1.0" python_min_version = ( 3 , 7 ) # 检查当前Python版本是否满足要求 # setuptools通常要求较新的Python版本 if sys.version_info < python_min_version: print ( f"警告: 你的Python版本是 {sys.version_info.major}. {sys.version_info.minor}。" f"此示例建议Python ttzb.info {python_min_version[ 0]}. {python_min_version[ 1]} 或更高版本。" ) else : print ( f"当前Python版本 {sys.version_info.major}. {sys.version_info.minor} 符合要求。" ) # 模拟 setup() 函数的部分参数 # 在实际项目中,这些信息会写入 setup.py 文件中 package_info = { remenzhibo.com 'name' : package_name, 'version' : package_version, 'description' : '一个用于演示setuptools基本信息的示例包' , 'author' : 'Your Name' , 'install_requires' : [ 'requests>=2.20.0' ], # 假设依赖requests库 'packages' : setuptools.find_packages(), # 自动查找包 } print ( f"\n模拟包信息定义 ( {package_info[ 'name']} v {package_info[ 'version']}):" ) print ( f" 描述: {package_info[ 'description']}" ) print ( f" 作者: {package_info[ 'author']}" ) print ( f" 所需依赖: {package_info[ 'install_requires']}" ) # setuptools.setup() 在实际中会在这里被调用 # print("\n在实际项目中,setuptools.setup() 将被调用,并传入以上信息进行包的构建和发布。") # 检查版本,只是一个演示目的 if setuptools.__version__:remenzhibo.net ttzhibo.net print ( f"\n当前安装的 setuptools 版本: {setuptools.__version__}" )
模拟包信息定义 (my_awesome_package v0.1.0): 描述: 一个用于演示setuptools基本信息的示例包 作者: Your Name 所需依赖: ['requests>=2.20.0']
网关(在高计算密集型任务下的瓶颈),C# 的强类型系统和先进的 JIT(Just-In-Time)编译器使得 sdcb/chats 能够在处理大量并发 WebSocket 连接和流式(Server-Sent Events, SSE)转发时保持极低的延迟。
特别是在处理 Token 计数 和 流式响应解析 时,sdcb/chats 利用了.NET 的 Span<T> 和 Memory<T> 等零拷贝技术,大幅减少了内存分配,这对于需要长时间维持会话状态的 AI Agent 场景至关重要。
在 v1.9.0 版本之前,大多数开源网关仅支持 OpenAI 的 Chat Completions API (/v1/chat/completions)。然而,随着 Claude 3.5 的发布及其配套工具 Claude Code 的流行,仅支持 OpenAI 协议已无法满足需求。Claude Code 严格依赖 Anthropic 的原生协议格式,特别是其独特的 Messages API (/v1/messages)。
sdcb/chats 在 v1.9.0 中实现了一个里程碑式的突破: 全栈兼容 Anthropic 协议。这不仅仅是 URL 路由的映射,更涉及深层的数据结构转换 :
● Thinking Block (思维链)支持:Claude 的推理模型(如 Claude 3.7 Sonnet)在输出最终代码前,会先输出一段 <thinking> 标签包裹的思维过程。普通的 OpenAI 兼容网关往往会将其视为普通文本直接返回,或者错误地截断。sdcb/chats 引入了 StepContentThink 数据库表,专门用于存储和结构化展示这一过程,确保客户端能正确渲染“思考中...”的状态,而不是展示一堆乱码。
● Signature (签名)验证:Anthropic 的 API 在某些高安全模式下会返回签名字段以验证内容的完整性。sdcb/chats 的后端架构重构了 ChatService,支持这一签名流的透传与存储,确保了与官方 API 的行为一致性。
● 原生 HttpClient 重写:为了适配 Claude 的流式传输特性,后端核心组件 AnthropicChatService 使用原生 HttpClient 进行了重写(涉及约 969 行代码变动),摒弃了可能存在兼容性问题的第三方 SDK 封装,从而支持了 JsonPolymorphic 属性来精确处理各种流式事件 3。
作为企业级网关,数据的可靠性是底线。sdcb/chats 提供了极其灵活的数据库适案:
● SQLite:默认配置,适合个人开发者或小团队快速部署。无需安装额外服务,数据库仅为一个 .db 文件,备份极其方便 7。
● PostgreSQL / SQL Server:针对需要高并发写入、读写分离或高级报表功能的企业环境。sdcb/chats 的 ORM 层设计允许通过简单的环境变量 DBType 切换底层存储引擎,而无需修改代码 8。 这种灵活性使得从个人笔记本上的验证原型(PoC)平滑迁移到基于 Kubernetes 的生产集群成为可能。
mage: mcr.microsoft.com/mssql/server:2025-latest
container_name: chats-sqlserver
environment:
ACCEPT_EULA: "Y"
MSSQL_SA_PASSWORD: "xxxxxx"
MSSQL_PID: "Developer"
ports:espnzhibo.cn
- "1433:1433"
volumes:
- sqlserver_data:/var/opt/mssql
restart: unless-stopped
chats:
image: sdcb/chats:1.10
container_name: sdcb-chats
depends_on:
- sqlserver
environment:
DBType: "sqlserver"
ConnectionStrings__ChatsDB: "Server=sqlserver;Database=ChatsDB;User Id=sa;Password=xxxxxx;TrustServerCertificate=True;Encrypt=False"
ports:nbczhibo.cn
- "8080:8080"
volumes:
- ./AppData:/app/AppData
restart: unless-stopped
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70048957/viewspace-3108984/ ,如需转载,请注明出处,否则将追究法律责任。