Files
evotraders/functionality/rag/react_agent_integration.py
raykkk 7d0451131f init
2025-10-17 21:40:45 +08:00

79 lines
2.8 KiB
Python

# -*- coding: utf-8 -*-
"""The example of integrating ReAct agent with RAG."""
import asyncio
import os
from agentscope.agent import ReActAgent, UserAgent
from agentscope.embedding import DashScopeTextEmbedding
from agentscope.formatter import DashScopeChatFormatter
from agentscope.message import Msg
from agentscope.model import DashScopeChatModel
from agentscope.rag import QdrantStore, SimpleKnowledge, TextReader
async def main() -> None:
"""The main entry point for the ReAct agent with RAG example."""
# Create an in-memory knowledge base instance
print("Creating the knowledge base...")
knowledge = SimpleKnowledge(
embedding_store=QdrantStore(
location=":memory:",
collection_name="test_collection",
dimensions=1024, # The dimension of the embedding vectors
),
embedding_model=DashScopeTextEmbedding(
api_key=os.environ["DASHSCOPE_API_KEY"],
model_name="text-embedding-v4",
),
)
# Insert some documents into the knowledge base
# This could be done offline and only once
print("Inserting documents into the knowledge base...")
reader = TextReader(chunk_size=100, split_by="char")
documents = await reader(
# Fake personal profile for demonstration
"I'm John Doe, 28 years old. My best friend is James "
"Smith. I live in San Francisco. I work at OpenAI as a "
"software engineer. I love hiking and photography. "
"My father is Michael Doe, a doctor. I'm very proud of him. "
"My mother is Sarah Doe, a teacher. She is very kind and "
"always helps me with my studies.\n"
"I'm now a PhD student at Stanford University, majoring in "
"Computer Science. My advisor is Prof. Jane Williams, who is "
"a leading expert in artificial intelligence. I have published "
"several papers in top conferences, such as NeurIPS and ICML. ",
)
print("Inserting documents into the knowledge base...")
await knowledge.add_documents(documents)
# Integrate into the ReActAgent by the `knowledge` argument
print("Creating the agent...")
agent = ReActAgent(
name="Friday",
sys_prompt="You are a helpful assistant named Friday.",
model=DashScopeChatModel(
api_key=os.environ["DASHSCOPE_API_KEY"],
model_name="qwen-max",
),
formatter=DashScopeChatFormatter(),
# Equip the agent with the knowledge base
knowledge=knowledge,
print_hint_msg=True,
)
user = UserAgent(name="user")
# Start the conversation
print("Start the conversation...")
msg = Msg("user", "Do you know who is my best friend?", "user")
while True:
msg = await agent(msg)
msg = await user(msg)
if msg.get_text_content() == "exit":
break
asyncio.run(main())