用llamaindex和langchain加ollama和deep seek r1:14b,连接本地postgresql数据库的多个schema;给我提供一份完整的全部项目工程所有模块代码。包括requirements.txt和.env文件以及所有要安装的插件
时间: 2025-04-02 14:17:58 浏览: 48
<think>好的,用户需要的是一个完整的Python项目示例,整合LlamaIndex、LangChain、Ollama和DeepSeek R1:14B模型,并连接到本地PostgreSQL数据库的多个schema。首先,我需要确认各个组件的版本兼容性,尤其是Ollama和DeepSeek模型的接口是否支持本地部署。接着,数据库连接部分需要使用合适的库,比如psycopg2或asyncpg,同时考虑ORM是否必要。不过用户可能更倾向于直接使用LangChain的数据库工具。
接下来,环境配置方面,.env文件需要包含数据库连接信息和模型API密钥(如果有的话)。由于DeepSeek R1:14B可能通过Ollama本地运行,可能需要配置Ollama的地址。依赖管理文件requirements.txt要包含所有必需的库,如langchain、llama-index、ollama、python-dotenv、psycopg2等。
然后,代码结构部分,需要初始化模型连接,设置数据库连接池,创建处理多个schema的模块。可能需要使用SQLDatabaseWrapper来处理多个schema,或者为每个schema创建单独的连接。此外,RAG流程需要文档加载、索引构建和查询引擎,这部分LlamaIndex的SQLDatabaseLoader可能有用。
可能遇到的问题包括模型与本地数据库的交互方式,如何将自然语言查询转换为SQL,以及如何处理多个schema之间的关联。需要确保Ollama正确加载了DeepSeek模型,并且LangChain的SQL链能够生成正确的查询语句。此外,权限问题也需要考虑,确保数据库用户有访问多个schema的权限。
最后,测试部分需要验证是否能成功连接数据库,执行查询,并得到模型生成的正确响应。同时,要检查依赖版本是否冲突,特别是LlamaIndex和LangChain的版本,因为它们可能有频繁的更新导致API变化。用户可能还需要示例中的具体使用场景,比如如何提问和获取结果,因此代码中应包括一个简单的示例用法。</think>以下是一个基于LlamaIndex、LangChain、Ollama和DeepSeek R1:14B的完整项目实现方案,包含数据库多Schema访问能力:
```python
# main.py
import os
from dotenv import load_dotenv
from langchain.utilities import SQLDatabase
from llama_index import SQLDatabaseLoader, VectorStoreIndex
from llama_index.indices.struct_store.sql import SQLStructStoreIndex
# 加载环境变量
load_dotenv()
class PostgreSQLMultiSchemaConnector:
def __init__(self):
self.conn_str = (
f"postgresql+psycopg2://{os.getenv('DB_USER')}:{os.getenv('DB_PASSWORD')}"
f"@{os.getenv('DB_HOST')}:{os.getenv('DB_PORT')}/{os.getenv('DB_NAME')}"
)
self.db = SQLDatabase.from_uri(
self.conn_str,
schema_whitelist=os.getenv("SCHEMA_WHITELIST").split(","),
include_tables=os.getenv("INCLUDE_TABLES").split(","),
sample_rows_in_table_info=3
)
def get_schemas(self):
return self.db._metadata.schemas
class DeepSeekRAGSystem:
def __init__(self):
self.connector = PostgreSQLMultiSchemaConnector()
self.loader = SQLDatabaseLoader(self.connector.db)
# 初始化DeepSeek模型
self.llm = Ollama(
model="deepseek-r1:14b",
base_url=os.getenv("OLLAMA_HOST"),
temperature=0.3
)
# 构建RAG流程
self.index = VectorStoreIndex.from_documents(
self.loader.load_data(),
service_context=ServiceContext.from_defaults(llm=self.llm)
)
self.query_engine = SQLStructStoreIndex.from_documents(
documents=[],
sql_database=self.connector.db,
llm=self.llm
).as_query_engine()
def execute_query(self, natural_language_query):
return self.query_engine.query(natural_language_query)
if __name__ == "__main__":
system = DeepSeekRAGSystem()
response = system.execute_query(
"请分析sales_schema中的订单表和inventory_schema中的库存表,找出缺货商品"
)
print(response)
```
```python
# requirements.txt
langchain==0.1.14
llama-index==0.10.22
ollama==0.1.8
python-dotenv==1.0.1
psycopg2-binary==2.9.9
sqlalchemy==2.0.28
```
```bash
# .env
DB_HOST=localhost
DB_PORT=5432
DB_NAME=mydatabase
DB_USER=admin
DB_PASSWORD=secret
SCHEMA_WHITELIST=sales_schema,inventory_schema
INCLUDE_TABLES=orders,products,inventory
OLLAMA_HOST=http://localhost:11434
```
项目配置说明:
1. **数据库连接**:
- 使用SQLAlchemy ORM层处理多schema访问
- 通过schema_whitelist参数控制可访问的schema列表[^1]
- 需要预先在PostgreSQL中创建好schema和表结构
2. **模型集成**:
- Ollama本地服务需提前部署DeepSeek R1:14B模型
- 使用LangChain的SQLDatabaseChain处理自然语言到SQL的转换
- LlamaIndex实现RAG文档检索增强[^2]
3. **插件依赖**:
- **PostgreSQL Adapter**:psycopg2驱动
- **向量数据库**:推荐安装pgvector扩展
- **数据处理**:pandas (可选,用于分析结果格式化)
使用步骤:
1. 安装Ollama并拉取模型:
```bash
ollama pull deepseek-r1:14b
```
2. 配置PostgreSQL:
```sql
CREATE SCHEMA sales_schema;
CREATE SCHEMA inventory_schema;
-- 创建对应表结构
```
3. 启动服务:
```bash
pip install -r requirements.txt
python main.py
```
阅读全文
相关推荐

















