Files
2026-07-13 12:37:47 +08:00

64 lines
2.2 KiB
Python

# rename .env.example to .env and add the following:
# SERPER_API_KEY=your_serper_api_key
# OPENAI_API_KEY=your_openai_api_key
from crewai import Crew, Agent, Task, LLM
import litserve as ls
from crewai_tools import SerperDevTool
# If you'd like, you can use a local LLM as well through Ollama. Do this:
# ollama pull qwen3 in the command line.
# Uncomment the following line and also the llm=llm line in the Agents definitions.
# llm = LLM(model="ollama/qwen3")
class AgenticRAGAPI(ls.LitAPI):
def setup(self, device):
researcher_agent = Agent(
role="Researcher",
goal="Research about the user's query and generate insights",
backstory="You are a helpful assistant that can answer questions about the document.",
verbose=True,
tools=[SerperDevTool()],
# llm=llm
)
writer_agent = Agent(
role="Writer",
goal="Use the available insights to write a concise and informative response to the user's query",
backstory="You are a helpful assistant that can write a report about the user's query",
verbose=True,
# llm=llm
)
researcher_task = Task(
description="Research about the user's query and generate insights: {query}",
expected_output="A concise and informative report about the user's query",
agent=researcher_agent,
)
writer_task = Task(
description="Use the available insights to write a concise and informative response to the user's query: {query}",
expected_output="A concise and informative response to the user's query",
agent=writer_agent,
)
self.crew = Crew(
agents=[researcher_agent, writer_agent],
tasks=[researcher_task, writer_task],
verbose=True,
)
def decode_request(self, request):
return request["query"]
def predict(self, query):
return self.crew.kickoff(inputs={"query": query})
def encode_response(self, output):
return {"output": output}
if __name__ == "__main__":
api = AgenticRAGAPI()
server = ls.LitServer(api)
server.run(port=8000)