静态缓存页面 · 查看动态版本 · 登录
智柴网 登录 | 注册
← 返回话题
✨步子哥 @steper · 2025-11-20 03:44

#!/usr/bin/env python3
"""
Agno 知识库向量数据库配置修复示例 - 最终版本

使用 DeepSeek 聊天模型 + 本地嵌入模型的组合。
"""

from agno.models.deepseek import DeepSeek
from agno.agent import Agent
from agno.knowledge.knowledge import Knowledge
from agno.db.sqlite import SqliteDb
from agno.vectordb.chroma import ChromaDb
import os

def create_knowledge_base():
    """创建知识库 - 使用本地嵌入模型"""
    print("=== 创建知识库 ===")
    
    # 使用本地嵌入模型(无需 API)
    # 这不需要 API key,完全本地运行
    try:
        from agno.knowledge.embedder.sentence_transformer import SentenceTransformerEmbedder
        
        embedder = SentenceTransformerEmbedder(
            id="sentence-transformers/all-MiniLM-L6-v2",  # 轻量级模型,适合中文
            dimensions=384,  # 该模型的输出维度
        )
        
        print("✅ 本地嵌入模型加载成功")
        
    except ImportError:
        print("❌ 未安装 sentence-transformers 包")
        print("请运行: pip install sentence-transformers")
        return None
    except Exception as e:
        print(f"❌ 加载嵌入模型失败: {e}")
        return None
    
    # 创建向量数据库
    vector_db = ChromaDb(
        collection="knowledge_base",
        path="tmp/chromadb",
        persistent_client=True,  # 启用持久化存储
        embedder=embedder,
    )
    
    # 创建知识库
    knowledge_base = Knowledge(
        vector_db=vector_db,
        contents_db=SqliteDb(db_file="knowledge_contents.db")
    )
    
    return knowledge_base

def create_agent():
    """创建 Agent - 使用 DeepSeek 聊天模型"""
    print("\n=== 创建 Agent ===")
    
    # 获取 DeepSeek API key
    api_key = os.getenv("DEEPSEEK_API_KEY") or os.getenv("OPENAI_API_KEY")
    if not api_key:
        print("⚠️  未找到 DEEPSEEK_API_KEY 或 OPENAI_API_KEY 环境变量")
        print("将使用 DeepSeek 模型,但可能无法访问 API")
    
    # 创建 DeepSeek 聊天模型
    model = DeepSeek(
        id="deepseek-chat",
        api_key=api_key,  # 如果设置了 API key 就使用,否则可能使用免费额度或其他方式
    )
    
    return model

def main():
    """主函数"""
    print("=" * 60)
    print("Agno 知识库向量数据库修复测试 - 最终版本")
    print("=" * 60)
    
    # 创建知识库
    knowledge_base = create_knowledge_base()
    
    if knowledge_base is None:
        print("\n❌ 知识库创建失败")
        return
    
    print("✅ 知识库初始化成功!")
    
    # 创建 DeepSeek 聊天模型
    model = create_agent()
    
    # 创建 Agent
    agent = Agent(
        model=model,
        knowledge=knowledge_base,
        instructions="你是一个知识专家,可以基于提供的知识库回答问题。",
    )
    
    # 添加知识到知识库
    print("\n=== 添加知识到知识库 ===")
    sample_texts = [
        "Python 是一种高级编程语言,由 Guido van Rossum 于 1991 年首次发布。",
        "JavaScript 是一种脚本语言,主要用于网页开发。",
        "机器学习是人工智能的一个分支,让计算机能够从数据中学习。",
    ]
    
    for i, text in enumerate(sample_texts):
        print(f"\n添加知识 {i+1}: {text[:50]}...")
        try:
            knowledge_base.add_content(text_content=text)
            print(f"✅ 知识 {i+1} 添加成功")
        except Exception as e:
            print(f"❌ 知识 {i+1} 添加失败: {e}")
    
    # 使用知识库回答问题
    print("\n=== 使用知识库回答问题 ===")
    try:
        agent.print_response("请介绍一下 Python 的历史。")
    except Exception as e:
        print(f"❌ 回答问题时出错: {e}")
    
    # 搜索知识库
    print("\n=== 搜索知识库 ===")
    try:
        search_results = knowledge_base.search("编程语言", max_results=2)
        print(f"找到 {len(search_results)} 条相关结果:")
        for i, doc in enumerate(search_results):
            print(f"{i+1}. {doc.content[:100]}...")
    except Exception as e:
        print(f"❌ 搜索时出错: {e}")

if __name__ == "__main__":
    main()

👍 1