Enterprise-grade AI framework for seamless LLM integration
Project description
ThinkAi - Enterprise AI Framework
基于Python异步的企业级AI大模型集成框架 - 开箱即用,简单易用,功能全面
- 🏠 Gitee: https://gitee.com/hongxinge/think-ai
- 🌐 GitHub: https://github.com/hongxinge/ThinkAi
- 📦 PyPI: https://pypi.org/project/thinkai-framework/
特性
- 轻量零依赖 - 核心框架不依赖任何Web框架,完全脱离FastAPI
- OpenAI SDK底层 - OpenAI及兼容Provider使用官方OpenAI Python SDK作为底层传输层,稳定可靠
- 多模型支持 - 支持Ollama、OpenAI、通义千问、DeepSeek、Claude、Gemini等主流大模型
- 统一接口 - 一次配置,多模型自由切换
- 开箱即用 - 简单配置即可使用,无需复杂配置
- 同步/异步双模式 - 异步优先,同时提供同步API,简单脚本无需async/await
- 符合OpenAI标准 - 采用OpenAI兼容的API格式
- 流式响应 - 支持SSE流式输出,Agent支持真正的流式Function Calling
- 会话管理 - 内置多轮对话上下文管理
- RAG支持 - 内置Embedding + 向量检索,3行代码实现检索增强生成
- Agent系统 - 内置ReAct Agent、Function Calling Agent、流式Function Calling Agent
- Skill系统 - 9大内置Skill(搜索/代码/数学/文件/数据库/API/图像/文本/系统),安全沙箱执行
- 记忆系统 - 长期记忆、跨会话记忆、自动遗忘、重要性衰减
- 多Agent协作 - Sequential/Parallel/Hierarchical三种协作模式
- MCP支持 - 轻量级Model Context Protocol客户端
- 中间件管道 - 日志、重试(真正有效),可扩展
- 缓存层 - LRU内存缓存/文件缓存,减少重复API调用
- 结构化输出 - Pydantic模型约束LLM输出,自动JSON解析与验证
- 速率限制 - Token Bucket限流 + 并发控制,企业级流量管理
- 追踪可观测 - TraceSpan链路追踪,Console/JSON导出
- Agent状态持久化 - 保存/恢复Agent执行状态,支持断点续跑
- 插件系统 - 动态加载外部Skill/Provider/Middleware,可扩展
- @tool装饰器 - 一行代码创建Tool,自动推断参数Schema
- 16种Prompt模板 - CoT/Few-Shot/翻译/代码审查/测试生成等
- 企业级安全 - 代码沙箱执行、文件路径限制、环境变量访问控制
- 企业级性能 - 异步架构,连接池,自动重试
- CLI工具 - 命令行直接对话
安装
# 基础安装 (轻量核心,无任何Web框架依赖)
pip install thinkai-framework
# Web开发支持(安装FastAPI依赖,用于构建API服务)
pip install thinkai-framework[web]
# 安装特定Provider
pip install thinkai-framework[ollama]
pip install thinkai-framework[openai]
pip install thinkai-framework[qwen]
# 安装全部依赖
pip install thinkai-framework[all]
快速开始
1. 最简使用(3行代码)
from thinkai import ThinkAI
ai = ThinkAI(provider="ollama", model="llama3")
response = await ai.chat("你好")
print(response.content)
2. 同步模式(无需async/await)
from thinkai import SyncThinkAI
ai = SyncThinkAI(provider="ollama", model="llama3")
response = ai.chat("你好")
print(response.content)
3. CLI命令行
# 查看版本
thinkai version
# 直接对话
thinkai chat "你好" --provider ollama
# 查看可用Provider
thinkai providers
4. FastAPI集成
from fastapi import FastAPI
from thinkai import ThinkAI
app = FastAPI()
ai = ThinkAI(provider="ollama", model="llama3")
@app.post("/chat")
async def chat(message: str):
response = await ai.chat(message)
return {"content": response.content}
# 启动: uvicorn main:app --reload
5. 多模型配置与切换
from thinkai import ThinkAI
ai = ThinkAI(provider="ollama", model="llama3")
# 注册多个模型
ai.register_model("qwen", provider="qwen", model="qwen-turbo")
ai.register_model("deepseek", provider="deepseek", model="deepseek-chat")
ai.register_model("gpt4", provider="openai", model="gpt-4")
# 自由切换
response1 = await ai.chat("你好", model="llama3")
response2 = await ai.chat("你好", model="qwen")
6. 多轮对话(会话管理)
ai = ThinkAI()
async with ai.session() as session:
response1 = await session.chat("你好,我想学习Python")
response2 = await session.chat("有什么好的学习路径?")
response3 = await session.chat("推荐一些资源吧")
7. 流式响应
ai = ThinkAI()
async for chunk in ai.chat_stream("讲一个故事"):
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
8. RAG(检索增强生成)
from thinkai import ThinkAI
from thinkai.rag import RAGPipeline
ai = ThinkAI(provider="ollama")
# 创建RAG Pipeline(自动使用Ollama Embedding)
rag = RAGPipeline(
documents=["./docs", "./knowledge"],
ai_client=ai,
)
# 索引文档
await rag.index()
# 查询
answer = await rag.query("ThinkAi框架支持哪些AI模型?")
print(answer)
Embedding说明: 默认使用轻量级哈希Embedding(开箱即用,无需额外模型)。配置Ollama后自动使用
nomic-embed-text模型生成高质量向量。
9. Function Calling Agent(函数调用智能体)
from thinkai import ThinkAI
from thinkai.agent import FunctionCallingAgent
from thinkai.skill import MathSkill, CodeSkill
ai = ThinkAI(provider="openai", api_key="your-key")
# 注意: 使用 + 拼接多个Skill的工具列表
agent = FunctionCallingAgent(
name="math-coder",
tools=MathSkill().get_tools() + CodeSkill().get_tools(),
ai_client=ai,
verbose=True,
)
result = await agent.run("计算123*456,然后用Python写一个斐波那契数列函数")
print(result)
10. 记忆系统
from thinkai import ThinkAI
from thinkai.memory import MemoryManager, FileMemoryStore
ai = ThinkAI(provider="ollama")
# 创建记忆管理器(默认使用文件存储)
memory = MemoryManager(
store=FileMemoryStore(base_path="./my_memory"),
max_memories=100,
enable_forgetting=True,
)
# 记住信息
await memory.remember("用户喜欢Python编程", memory_type="preference", importance=0.8)
await memory.remember("项目使用FastAPI框架", memory_type="fact", importance=0.9)
# 回忆相关记忆
results = await memory.recall("编程语言")
for item in results:
print(f"[{item.memory_type}] {item.content} (重要性: {item.importance})")
# 构建上下文Prompt(自动注入到对话中)
context = await memory.build_context_prompt("Python开发", max_tokens=500)
11. 多Agent协作
from thinkai import ThinkAI
from thinkai.agent import ReActAgent, FunctionCallingAgent
from thinkai.agent.orchestrator import MultiAgentOrchestrator, AgentRole
from thinkai.skill import MathSkill, WebSearchSkill
ai = ThinkAI(provider="openai", api_key="your-key")
orchestrator = MultiAgentOrchestrator(ai_client=ai)
# 添加Agent
orchestrator.add_agent(
agent=FunctionCallingAgent(
name="researcher",
tools=WebSearchSkill().get_tools(),
ai_client=ai,
),
role=AgentRole.SPECIALIST,
capabilities=["search", "research"],
)
orchestrator.add_agent(
agent=FunctionCallingAgent(
name="analyzer",
tools=MathSkill().get_tools(),
ai_client=ai,
),
role=AgentRole.WORKER,
capabilities=["math", "analysis"],
)
# 顺序执行
result = await orchestrator.run(
task=["搜索AI最新进展", "分析搜索结果中的关键数据"],
mode="sequential",
)
# 并行执行
result = await orchestrator.run(
task=["搜索AI进展", "搜索量子计算进展", "搜索区块链进展"],
mode="parallel",
)
# 层级执行(协调者自动分解任务)
result = await orchestrator.run(
task="调研AI行业现状并生成分析报告",
mode="hierarchical",
)
12. MCP(Model Context Protocol)
from thinkai import ThinkAI
from thinkai.mcp import MCPAdapter, MCPRegistry
ai = ThinkAI(provider="openai", api_key="your-key")
adapter = MCPAdapter()
# 添加MCP Server(使用预定义配置)
fs_config = MCPRegistry.filesystem("/workspace")
adapter.add_server(**fs_config)
# 连接并创建Agent
await adapter.connect_all()
agent = adapter.create_agent(ai_client=ai)
result = await agent.run("读取/workspace/readme.md文件内容")
print(result)
# 使用完毕后关闭
await adapter.close_all()
13. Agent生命周期钩子
from thinkai import ThinkAI
from thinkai.agent import FunctionCallingAgent
ai = ThinkAI(provider="openai", api_key="your-key")
agent = FunctionCallingAgent(
ai_client=ai,
on_start=lambda task: print(f"🚀 开始任务: {task}"),
on_tool_call=lambda name, args: print(f"🔧 调用工具: {name}"),
on_tool_result=lambda name, result: print(f"✅ 工具结果: {name}"),
on_finish=lambda result: print(f"🎯 任务完成"),
on_error=lambda e: print(f"❌ 错误: {e}"),
)
result = await agent.run("计算2的10次方")
支持的AI模型(开箱即用)
框架已内置所有主流大模型,支持以下Provider:
| Provider | 默认模型 | API地址 | 类型 | 获取API Key |
|---|---|---|---|---|
| Ollama | llama3 | http://localhost:11434 | 本地免费 | 无需Key |
| OpenAI | gpt-3.5-turbo | https://api.openai.com/v1 | 云端 | platform.openai.com |
| DeepSeek | deepseek-chat | https://api.deepseek.com/v1 | 云端免费 | platform.deepseek.com |
| 通义千问 | qwen-turbo | https://dashscope.aliyuncs.com | 云端 | dashscope.console.aliyun.com |
| 智谱GLM | glm-4 | https://open.bigmodel.cn | 云端 | open.bigmodel.cn |
| 百度文心 | ernie-bot | https://qianfan.baidubce.com | 云端 | qianfan.cloud.baidu.com |
| 腾讯混元 | hunyuan | https://api.hunyuan.cloud.tencent.com | 云端 | cloud.tencent.com |
| 豆包ARK | doubao-pro | https://ark.cn-beijing.volces.com | 云端 | console.volcengine.com |
| Kimi | moonshot-v1-8k | https://api.moonshot.cn/v1 | 云端 | platform.moonshot.cn |
| MiniMax | abab6-chat | https://api.minimax.chat/v1 | 云端 | api.minimax.chat |
| Anthropic Claude | claude-3-sonnet | https://api.anthropic.com | 云端 | console.anthropic.com |
| Google Gemini | gemini-pro | https://generativelanguage.googleapis.com | 云端 | ai.google.dev |
快速使用(复制即用)
from thinkai import ThinkAI
# 本地模型(无需API Key)
ai = ThinkAI(provider="ollama", model="llama3")
# OpenAI GPT系列
ai = ThinkAI(provider="openai", api_key="your-key", model="gpt-4")
# DeepSeek(性价比高)
ai = ThinkAI(provider="deepseek", api_key="your-key")
# 通义千问(阿里云)
ai = ThinkAI(provider="qwen", api_key="your-key")
# 智谱GLM
ai = ThinkAI(provider="glm", api_key="your-key")
# 百度文心
ai = ThinkAI(provider="baidu", api_key="your-key")
# 腾讯混元
ai = ThinkAI(provider="tencent", api_key="your-key")
# 豆包(字节跳动)
ai = ThinkAI(provider="doubao", api_key="your-key")
# Kimi(月之暗面)
ai = ThinkAI(provider="kimi", api_key="your-key")
# MiniMax
ai = ThinkAI(provider="minimax", api_key="your-key")
# Anthropic Claude
ai = ThinkAI(provider="claude", api_key="your-key", model="claude-3-5-sonnet-20241022")
# Google Gemini
ai = ThinkAI(provider="gemini", api_key="your-key", model="gemini-pro")
项目结构
thinkai/
├── thinkai/
│ ├── __init__.py
│ ├── core/ # 核心模块
│ │ ├── client.py # 统一客户端
│ │ ├── config.py # 配置管理
│ │ └── models.py # 数据模型
│ ├── providers/ # Provider实现
│ │ ├── base.py # Provider基类(连接池,重试)
│ │ ├── registry.py # 注册表
│ │ ├── ollama.py # Ollama
│ │ ├── openai.py # OpenAI
│ │ ├── openai_compatible.py # OpenAI兼容(9大国产模型)
│ │ └── shortcuts.py # 快捷Provider注册
│ ├── session/ # 会话管理
│ ├── prompt/ # Prompt模板
│ ├── middleware/ # 中间件(日志,重试)
│ ├── rag/ # RAG模块
│ │ ├── pipeline.py # RAG Pipeline
│ │ ├── embedding.py # Embedding(哈希/Ollama/OpenAI)
│ │ ├── vector_store.py # 向量存储抽象
│ │ ├── chroma_store.py # ChromaDB实现
│ │ ├── document_loader.py # 文档加载器
│ │ └── text_splitter.py # 文本分割器
│ ├── agent/ # Agent模块
│ │ ├── base.py # Agent基类(生命周期钩子)
│ │ ├── react.py # ReAct Agent
│ │ ├── function_calling.py # Function Calling Agent
│ │ ├── streaming_fc.py # 流式Function Calling Agent
│ │ ├── orchestrator.py # 多Agent协作
│ │ └── tool.py # Tool定义
│ ├── skill/ # Skill系统
│ │ ├── __init__.py # Skill基类和内置Skill(安全沙箱)
│ │ └── builtin_skills.py # 更多内置Skill
│ ├── memory/ # 记忆系统
│ ├── mcp/ # MCP协议支持
│ ├── cache/ # 缓存层(Memory/File)
│ ├── structured/ # 结构化输出
│ ├── tracing/ # 链路追踪
│ ├── plugin/ # 插件系统
│ ├── sync.py # 同步API封装
│ ├── cli.py # CLI命令行工具
│ ├── streaming.py # 流式处理
│ └── exceptions.py # 异常定义
├── tests/ # 测试(223个测试用例)
├── pyproject.toml # 项目配置
└── README.md
配置方式
方式1: 代码配置
ai = ThinkAI(
provider="ollama",
model="llama3",
temperature=0.7,
max_tokens=2048,
timeout=60,
)
方式2: 环境变量
export THINKAI_DEFAULT_PROVIDER=ollama
export THINKAI_DEFAULT_MODEL=llama3
export OPENAI_API_KEY=your_key_here
方式3: YAML配置文件
default_provider: "ollama"
default_model: "llama3"
providers:
openai:
api_key: "${OPENAI_API_KEY}"
api_base: "https://api.openai.com/v1"
models:
llama3:
provider: "ollama"
model: "llama3"
temperature: 0.7
from thinkai.core.config import Settings
config = Settings.from_file("config.yaml")
ai = ThinkAI(config=config)
安全特性
ThinkAi框架内置多层安全保护,适合企业级使用:
- 代码执行沙箱 - CodeSkill使用AST验证+受限内置函数,禁止import、文件访问、系统调用
- 数学表达式安全 - MathSkill使用AST解析,只允许数学运算符,杜绝eval()注入
- 文件路径限制 - FileSkill默认只允许访问当前目录,可配置allowed_dirs
- 环境变量保护 - SystemSkill只允许读取指定前缀的环境变量(默认THINKAI_/APP_/PATH)
- 目录访问控制 - SystemSkill的list_directory同样受路径限制
from thinkai.skill import FileSkill, CodeSkill, SystemSkill
# 配置文件访问范围
file_skill = FileSkill(allowed_dirs=["/data", "/workspace"])
# 配置环境变量访问前缀
system_skill = SystemSkill(allowed_env_prefixes=["MYAPP_", "THINKAI_"])
# 代码沙箱自动阻止危险操作
code_skill = CodeSkill()
# 以下代码会被阻止: import os, open(), exec(), eval()
高级功能
中间件系统(真正有效的重试)
from thinkai.middleware import LoggingMiddleware, RetryMiddleware
ai = ThinkAI()
ai.add_middleware(LoggingMiddleware())
ai.add_middleware(RetryMiddleware(max_retries=3, backoff_factor=2.0))
# RetryMiddleware现在真正有效 - 在ThinkAI.chat()中实现重试循环
Prompt模板
from thinkai.prompt.template import PromptTemplate, prompt_manager
# 使用内置模板
template = prompt_manager.get("system_code")
prompt = template.format()
# 自定义模板
custom = PromptTemplate("将以下代码转换为$type: $code")
result = custom.format(type="Python", code="...")
自定义Provider
from thinkai.providers.base import BaseProvider
from thinkai.providers.registry import register_provider
@register_provider("custom")
class CustomProvider(BaseProvider):
name = "custom"
default_model = "custom-model"
async def chat(self, request):
# 实现聊天逻辑
pass
async def chat_stream(self, request):
# 实现流式聊天逻辑
pass
缓存层(减少重复API调用)
from thinkai import ThinkAI
from thinkai.cache import CacheMiddleware, MemoryCache, cached
ai = ThinkAI()
# 方式1: 中间件缓存(自动缓存chat请求)
ai.add_middleware(CacheMiddleware(ttl=300))
# 方式2: 独立缓存
cache = MemoryCache(max_size=1000, default_ttl=3600)
await cache.set("query:hello", {"content": "你好!"})
result = await cache.get("query:hello")
# 方式3: @cached装饰器
@cached(ttl=300)
async def ask_ai(question: str):
return await ai.chat(question)
结构化输出(Pydantic模型约束)
from thinkai import ThinkAI
from pydantic import BaseModel, Field
ai = ThinkAI(provider="openai", api_key="your-key")
class PersonInfo(BaseModel):
name: str = Field(description="人名")
age: int = Field(description="年龄")
occupation: str = Field(description="职业")
# 自动生成Schema Prompt + JSON解析 + Pydantic验证
person = await ai.structured.extract(
"张三今年28岁,是一名软件工程师",
PersonInfo,
)
print(person.name) # 张三
print(person.age) # 28
print(person.occupation) # 软件工程师
@tool装饰器(一行创建工具)
from thinkai.agent import FunctionCallingAgent
from thinkai.agent.tool import tool
@tool
def search_web(query: str, num_results: int = 5) -> str:
"""Search the web for information."""
return f"Results for: {query}"
@tool(name="calculator", description="Perform calculations")
def calculate(expression: str) -> str:
"""Calculate a math expression."""
return str(eval(expression))
agent = FunctionCallingAgent(tools=[search_web, calculate], ai_client=ai)
速率限制(企业级流量管理)
from thinkai import ThinkAI
from thinkai.middleware.rate_limit import RateLimitMiddleware
ai = ThinkAI()
# 60请求/分钟, 最大10并发
ai.add_middleware(RateLimitMiddleware(
requests_per_minute=60,
burst=10,
max_concurrent=10,
))
链路追踪(可观测性)
from thinkai.tracing import get_tracer, ConsoleTraceExporter, TraceCallback
tracer = get_tracer()
tracer.add_exporter(ConsoleTraceExporter())
# 方式1: 上下文管理器
async with tracer.trace("chat_request", model="gpt-4"):
response = await ai.chat("你好")
# 方式2: Agent生命周期回调
callback = TraceCallback(tracer)
agent = FunctionCallingAgent(
ai_client=ai,
on_start=callback.on_start,
on_tool_call=callback.on_tool_call,
on_tool_result=callback.on_tool_result,
on_finish=callback.on_finish,
on_error=callback.on_error,
)
Agent状态持久化(断点续跑)
from thinkai.agent import FunctionCallingAgent
from thinkai.agent.state import PersistentAgentMixin, FileStateStorage
# 创建带持久化的Agent
class MyAgent(FunctionCallingAgent, PersistentAgentMixin):
pass
agent = MyAgent(ai_client=ai)
storage = FileStateStorage(storage_dir="./agent_states")
# 保存状态
state_id = await agent.save_state(storage)
# 恢复状态(断点续跑)
await agent.restore_state(state_id, storage)
result = await agent.run("继续之前的任务")
插件系统(动态扩展)
from thinkai.plugin import thinkai_plugin, plugin_manager
# 定义插件
@thinkai_plugin(name="my-skill", version="1.0", description="自定义Skill", plugin_type="skill")
class MyCustomSkill:
def get_tools(self):
return [...]
# 安装到框架
plugin_manager.install_skill("my-skill", skill_manager)
更多Prompt模板
from thinkai.prompt.template import prompt_manager
# Chain-of-Thought推理
prompt = prompt_manager.format("chain_of_thought", question="为什么天空是蓝色的?")
# Few-Shot学习
prompt = prompt_manager.format("few_shot", examples="Q:2+2? A:4", question="Q:3+3?")
# 代码审查
prompt = prompt_manager.format("code_review", language="Python", code="def add(a,b): return a+b")
# 翻译
prompt = prompt_manager.format("translate", source_lang="English", target_lang="Chinese", text="Hello")
# 测试生成
prompt = prompt_manager.format("test_generation", language="Python", code="def add(a,b): return a+b")
企业级特性
- 异步架构 - 全面使用async/await,高性能
- 同步封装 - SyncThinkAI让简单脚本无需async/await
- 连接池 - HTTP连接复用,可配置连接池大小
- 自动重试 - 真正有效的重试机制,指数退避
- 缓存层 - LRU内存缓存/文件缓存,减少API调用
- 速率限制 - Token Bucket限流 + 并发控制
- 链路追踪 - TraceSpan链路追踪,Console/JSON导出
- 安全沙箱 - 代码执行、文件访问、环境变量多层保护
- 结构化输出 - Pydantic模型约束LLM输出
- 状态持久化 - Agent断点续跑
- 插件系统 - 动态加载Skill/Provider/Middleware
- 错误处理 - 完善的异常体系
- 类型安全 - 完整的Type Hints + Pydantic验证
- 日志记录 - 结构化日志支持
- 生命周期钩子 - Agent执行过程可观测
- CLI工具 - 命令行直接使用
文档
完整文档请访问: https://thinkai.readthedocs.io
贡献
欢迎提交Issue和Pull Request!
许可证
MIT License
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file thinkai_framework-0.7.0.tar.gz.
File metadata
- Download URL: thinkai_framework-0.7.0.tar.gz
- Upload date:
- Size: 100.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d19563e460c8f8f79155fd55c63db1d22bdc7ff80b894da1c98db8ee6c1e701f
|
|
| MD5 |
e1f0370179bc4d61773ef60f3febde4a
|
|
| BLAKE2b-256 |
47aff2121037c296fe58e8b408acb049ebc82c365f638ee190b3c0834933dc91
|
File details
Details for the file thinkai_framework-0.7.0-py3-none-any.whl.
File metadata
- Download URL: thinkai_framework-0.7.0-py3-none-any.whl
- Upload date:
- Size: 97.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
146aab20e0534f332c65e6cf7c1f79bd9fd4ee82399ec1e796dc9af3eacc1546
|
|
| MD5 |
adb300202d5e3c1ef3d25409014906db
|
|
| BLAKE2b-256 |
e37dadf4a8be5c050a69eed9b8006f5768e25e0408b75d332c843a06a9a100ad
|