在原项目的基础上,我们使用 Ollama 在本地部署 DeepSeek 模型,和 embedding 模型 mxbai-embed-large,来运行 Generative Agents 项目。
环境
1 2 3 4 5
| No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.5 LTS Release: 22.04 Codename: jammy
|
Ollama的安装和模型的本地部署
- 在Linux系统安装Ollama
1
| curl -fsSL https://ollama.com/install.sh | sh
|
- 使用Ollama 安装生成模型, 可安装模型列表,我选择了deepseek-v2, 可根据自己的系统配置安装不同的版本。
1 2 3 4 5
| ollama run deepseek-v2:16b
ollama run deepseek-v3:671b
|
- 使用Ollama 安装embedding模型, 可安装模型列表
1 2
| ollama pull mxbai-embed-large
|
代码修改
主要修改文件 reverie/backend_server/persona/prompt_template/gpt_structure.py, 可参考文件gpt_structure.py 中的 model_request 的函数的request_type == "ollama"
在文件开头添加变量
1 2 3 4
| OLLAMA_API_URL = "http://localhost:11434" MODEL = "deepseek/deepseek-chat" EMBEDDING_MODEL = "mxbai-embed-large:latest"
|
- 修改函数 ChatGPT_single_request(prompt), GPT4_request(prompt), ChatGPT_request(prompt)。
原代码:
1 2 3 4 5
| completion = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": prompt}] ) return completion["choices"][0]["message"]["content"]
|
替换代码:
1 2 3 4 5
| completion = ollama.chat( model=MODEL, messages=[{"role": "user", "content": prompt}], ) return completion['message']['content']
|
- 修改函数GPT_request(prompt, gpt_parameter)
原代码:
1 2 3 4 5 6 7 8 9 10 11
| response = openai.Completion.create( model=gpt_parameter["engine"], prompt=prompt, temperature=gpt_parameter["temperature"], max_tokens=gpt_parameter["max_tokens"], top_p=gpt_parameter["top_p"], frequency_penalty=gpt_parameter["frequency_penalty"], presence_penalty=gpt_parameter["presence_penalty"], stream=gpt_parameter["stream"], stop=gpt_parameter["stop"],) return response.choices[0].text
|
替换代码:
1 2 3 4 5
| completion = ollama.chat( model=MODEL, messages=[{"role": "user", "content": prompt}], ) return completion['message']['content']
|
- 修改embeding 模型
原代码:
1 2 3 4 5 6
| def get_embedding(text, model="text-embedding-ada-002"): text = text.replace("\n", " ") if not text: text = "this is blank" return openai.Embedding.create( input=[text], model=model)['data'][0]['embedding']
|
替换代码:
1 2 3 4 5 6 7 8
| def get_embedding(text, model=EMBEDDING_MODEL): text = text.replace("\n", " ") if not text: text = "this is blank" response = ollama.embeddings(model=model, prompt=text) embedding = response["embedding"] return embedding
|
运行
运行部分不需要做任何修改,可参考原README文件,
References
论文PDF: Generative Agents: Interactive Simulacra of Human Behavior
论文作者提供代码: Github
修改代码参考: liberow